poj 2229

来源:互联网 发布:中国人寿网络大学 编辑:程序博客网 时间:2024/06/07 04:50

如果i为奇数,肯定有一个1,把f[i-1]的每一种情况加一个1就得到fi,所以f[i]=f[i-1]


如果i为偶数,如果有1,至少有两个,则f[i-2]的每一种情况加两个1,就得到i,如果没有1,则把分解式中的每一项除


2,则得到f[i/2]


所以f[i]=f[i-2]+f[i/2]


由于只要输出最后9个数位,别忘记模1000000000


#include <stdio.h>int main() {int n;int f[1000005];f[1] = 1;f[2] = 2; for(int i=3; i<=1000000; i++) {if(i%i)f[i] = f[i-1];else {f[i] = f[i-2] + f[i/2];f[i] %= 1000000000;}}scanf("%d", &n);printf("%d\n", f[n]);return 0;}


0 0
原创粉丝点击