Sumsets
http://acm.hdu.edu.cn/showproblem.php?pid=2709
很久没做了一看题目傻逼了
直接递归
#include <stdio.h>
int n;
int answer;
void dfs(int minNumber , int number)
{
if (minNumber > number)
return;
if (minNumber == number)
{
answer ++ ;
}
else
{
dfs(minNumber, number - minNumber);
dfs(minNumber * 2, number);
}
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
answer = 0;
dfs(1, n);
printf("%d\n",answer);
}
return 0;
}
运行的挺快的 但是就是出错看了一会儿 直接醉了
上正确代码
#include<stdio.h>
int a[1000001];
int main()
{
int n;
int i;
a[1]=1;a[2]=2;
for(i=3;i<1000001;i++)
{
if(i%2==0)
{
a[i]=a[i-2]+a[i/2];
}
else
{
a[i]=a[i-1];
}
a[i]%=1000000000;
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]);
}
return 0;
}