hdu-2709-Sumsets

来源:互联网 发布:counter python 编辑:程序博客网 时间:2024/05/22 06:07

题意:给你一个数n,用2的幂相加,和为n,共有多少种


解题思路:

递推.

一、当n为奇数时,a[n]=a[n-1];

二、当n为偶数时有两种情况:

1、n=n-2+1+1;

2、n=n/2*2;

所以:a[n]=a[n-2]+a[n/2];

程序:

#include<stdio.h>#include<string.h>#define N 1000000000#define M 1000006int a[M];int main(){    int n,i,j;    a[0]=1;    a[1]=1;    for(i=2;i<M;i++)    {        if(i%2!=0)        a[i]=a[i-1];        else        {            a[i]=(a[i-2]+a[i/2])%N;   // 每次都先取余         }    }    while(scanf("%d",&n)!=EOF)    {        printf("%d\n",a[n]);    }    return 0;}

0 0
原创粉丝点击