package main import ( "fmt" "strconv" ) func scan() (N int) { fmt.Scan(&N) return } func countBit(i int) (count int) { s := strconv.FormatInt(int64(i), 2) for _, c := range s { if c == '1' { count++ } } return count } func getCount(i int, matrix []bool, N int, count int) int { if i == N { return count } if i < 1 || i > N || matrix[i] == true { return -1 } count++ matrix[i] = true step := countBit(i) fowardStep := i + step backwardStep := i - step fowardCount := getCount(fowardStep, matrix, N, count) backwardCount := getCount(backwardStep, matrix, N, count) if fowardCount > backwardCount { return fowardCount } else { return backwardCount } } func main() { var N int N = scan() // N = 11 matrix := make([]bool, N) res := getCount(1, matrix, N, 1) fmt.Print(res) }