题目解释
题目说的可能有一点点歧义
解释一下就是,给定了一个自然数N
可以进行三种操作
1.不操作
2.将一个小于等于N/2的自然数X加到N的左边
3.以新加的自然数X为基准,取一个自然数Y<=X/2,加在XN(2操作做完后的新数)左侧,是它成为YXN以此类推;
思路
很经典的递推
写出方程的话就是
ans(0)=1;
ans(n)=ans(0)+ans(k);(k=1,2...n/2(向下取整))
代码
int cc[1005];
int main()
{
int n;
cin >> n;
cc[0] = 1;
for (int i = 1; i <= 1000; i++)
{
int sum = 0;
for (int j = 1; j <= i / 2; j++)
{
sum += cc[j];
}
cc[i] = cc[0] + sum;
}
cout << cc[n];
return 0;
}如果不理解原理,可以自己写一下,推一下。模拟一下递推的过程就知道了。
tips:n>=4时,将第一次加的数相同的结果写在一起,比较好看出规律.
例:
n=1
1
n=2
2
12
n=3
3
13
n=4
14
24
124 //很明显,对于这两行,将尾部的4去掉,就是n=2时的结果.
4

京公网安备 11010502036488号