题目的意思是输入N,有多少种由2的整数幂相加的情况。
下面的是AC 的代码:
#include <iostream> #include <cstring> using namespace std; int dp[1000002]; int a[21]; const int mod = 1000000000; int main() { int i; memset(dp, 0, sizeof(dp)); dp[0] = 0; dp[1] = 1; dp[2] = 2; for(i = 3; i < 1000002; i++) { if(i % 2) //奇数的情况,直接由i-1再加1过来的 { dp[i] = dp[i - 1]; } else //偶数的情况,由i-1的情况和i / 2的情况相加 { dp[i] = dp[i - 1] + dp[i / 2]; } dp[i] %= mod; } int n; cin >> n; cout << dp[n] << endl; return 0; }
原文地址:http://blog.csdn.net/qq_25425023/article/details/45698825