大意略。
思路:记忆化搜索即可。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int d[78];
int n;
bool vis[78];
int dp(int i)
{
int &ans = d[i];
if(vis[i]) return ans;
vis[i] = 1;
if(i == n || i+1 == n) ans = 1;
else if(i > n) ans = 0;
else ans = dp(i+2) + dp(i+3);
return ans;
}
void solve()
{
memset(vis, 0, sizeof(vis));
int ans;
if(n == 1) ans = 1;
else if(n == 2) ans = 2;
else ans = dp(1) + dp(2);
printf("%d\n", ans);
}
int main()
{
while(~scanf("%d", &n))
{
solve();
}
return 0;
}