這題不需要考慮重複情況,可以說就是簡單的記憶化搜尋。
代碼如下:
#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;
}