洛谷打卡1

题目链接:点击打开链接

#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;
} 

猜你喜欢

转载自blog.csdn.net/dyd850804/article/details/81043168