package main import . "fmt" var m = make(map[int]int) func f(c, n int) { if cc, ok := m[n]; !ok || c < cc { m[n] = c } for i:=1; i<=n ;i++ { if c < 10 && n+i <20 { f(c+1,n+i) } } } func show20() { f(0, 1) for v,c := range m { Printf("v=%d (%b), c=%d\n", v,v,c) } } func main() { var n int Scan(&n) var x, c int x = 1 for x * 2 <= n { x *= 2 c++ } d := n - x if d != 0 { x -= d x += (d * 2) c++ } if x != n { panic("bug?") } Println(c) }