题目:http://acm.hdu.edu.cn/showproblem.php?pid=1284
代码:
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int Max=32769;
int ans[Max];
int tans[Max];
int main()
{
int i,j,n;
for(int i=0; i<Max; i++)
ans[i]=1;
memset(tans,0,sizeof(tans));
for(int k=2; k<=3; k++)
{
for(i=0; i<Max; i++)
{
for(j=0; i+j<Max; j+=k)
{
tans[i+j]+=ans[i];
}
}
for(i=0; i<Max; i++)
{
ans[i]=tans[i];
tans[i]=0;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",ans[n]);
}
return 0;
}
代码:
#define MaxSize 32768
int cnt[MaxSize];
void init()
{
int i;
cnt[0] = 1;
for (i = 1; i < MaxSize; i++)
{
cnt[i] += cnt[i-1];
}
for (i = 2; i < MaxSize; i++)
{
cnt[i] += cnt[i-2];
}
for (i = 3; i < MaxSize; i++)
{
cnt[i] += cnt[i-3];
}
}
int main()
{
int num;
init();
while (EOF != scanf("%d", &num))
{
printf("%d\n", cnt[num]);
}
return 0;
}