这题不需要考虑重复情况,可以说就是简单的记忆化搜索。
代码如下:
#include<stdio.h>
using namespace std;
const int MAX_N = 1001;
int f[MAX_N];
int N;
int work(int t)
{
if (t==0) return 1;
if (f[t]) return f[t];
int i;
int tmp=0;
for (i=0;i<=t/2;i++)
tmp+=work(i);
return f[t]=tmp;
}
int main()
{
scanf("%d",&N);
printf("%d",work(N));
return 0;
}