题目链接:点击打开链接
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
/*经过递推可以得到:
我们以4为例子来进行说明
4后面可以跟上1,2组成14,2
14后面跟不了,24可以跟上1组成124
再加上4本身就可以得到4的种类
即 14,24,124,4
而我们只要算出1,2的种类就可以加起来得到4的种类
如果假设f[n]表示数n的种类:
则:
f[1]:1;
f[2]:2,12;
f[3]:3,13,123;
f[4]:4,14,24,124;
f[5]:5,15,25,125;
f[6]:6,16,26,36,126,136;
...
f[1]=1;
f[2]=f[1]+1;
f[3]=f[1]+f[2]+1;
f[4]=f[1]+f[2]+1;
所以f[n]=f[o]+f[p]+f[q]+...+1;
其中o、p、q都表示所有<=n/2的数;
转化为for循环,i从1~n循环,内层循环j从1~i/2遍历,求所有f[j]的值,所以f[i]+=f[j] ,
*/
int f[1010];// 声明为全局数组,防止被随机分配值
int main()
{
int n,i,j;
cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=i/2;j++)
{
f[i]+=f[j];
}
f[i]++;
}
cout<<f[n]<<endl;
return 0;
}