poj 2229
如果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; }