1.题目链接。一个简单的计数DP。分奇偶讨论一下就OK,没有很大的思考量。代码如下:
#include"stdafx.h"
#include<iostream>
using namespace std;
const int N = 1e6 + 10;
#define ll long long
#pragma warning(disable:4996)
const int mod = 1e9;
ll dp[N];
int main()
{
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i < N; i++)
{
if (i & 1)
{
dp[i] = dp[i - 1];
}
else
{
dp[i] = (dp[i - 2] + dp[i / 2])%mod;
}
}
int n;
while (~scanf("%d", &n))
{
printf("%d\n", dp[n]);
}
}