HDU 2709 Sumsets

来源:互联网 发布:做网络销售的技巧 编辑:程序博客网 时间:2024/05/21 17:16

我是真的菜啊,ORZ!
这个题是一个递推题,首先分析,对于奇数来说,奇数的个数等于它上一个偶数的个数,对于偶数,可把它想成+1 + 1的方式,把它分解成加第一个1的时候它变成了奇数,由奇数的计算方法可得它等于奇数 - 1,当加两个1时,就相当于加2了,此时的项应该不含+1,因为含+1的话,就和前面的情况重复了,含+2的项的将它提取公因子可发现它与n / 2的项数相同。

#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int N = 1000010;long long  a[N];int main(){    int n;    memset(a,0,sizeof(a));    a[1] = 1;    a[2] = 2;    for(int i = 3; i <= 1000000; i++)    {        if(i % 2 == 1)            a[i] = a[i - 1];        else            a[i] = a[i - 2] + a[i / 2];        a[i] %= 1000000000;    }    while(cin >> n)        cout << a[n] << endl;    return 0;}其实一直不明白最后问题只用最后9位是什么个意思,一直在错,看看博客才知道,因为加到后面数很大所以mod一下。
原创粉丝点击