P1028 [NOIP2001 普及组] 数的计算 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
dp递推问题
我们以4为例子来进行说明:4后面可以跟上1,2组成14,24
14后面跟不了,24可以跟上1组成124
再加上4本身就可以得到4的种类
递推公式如下:
f[1]=1
f[2]=2=f[1]+1
f[3]=2=f[1]+1
f[4]=4=f[1]+f[2]+1
f[5]=4=f[1]+f[2]+1
f[n]=f[1]+f[2]+...+f[n/2]+1
代码如下:
#include <iostream>
using namespace std;
const int N=1010;
int d[N];
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=i/2;j++) d[i]+=d[j];
d[i]++;
}
printf("%d",d[n]);
return 0;
}