给定一个1….n的正整数序列,每次操作可以从序列寻找出一个或多个正整数,然后同时减去一个相同的正整数。
通过画图可以发现只要把后一半都减去n/2就和前一半一样了,所以有递推式 f(n )=f(n/2) + 1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
#include <cstdio>using
namespace
std;int
f(int
n) { return
n == 1 ? 1 : f(n >> 1) + 1;}int
main() { int
n; while(~scanf("%d",&n)) { printf("%d\n",f(n)); } return
0;} |
Uva 11384 Help is needed for Dexter
原文:http://www.cnblogs.com/rolight/p/3541379.html