这篇博客讲得比较好:RPG难题—HDU2045(解题报告)
以n-1格分情况:
与第一格颜色不同:共有f(n-1)种情况,此时最后一格只能涂一种颜色
与第一格颜色相同:共有f(n-2)种情况,此时最后一格可选涂两种颜色
所以可得:f(n)=f(n-1)*1+f(n-2)*2
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n,dp[51]={0,3,6,6};
for(ll i=4;i<=50;i++)
dp[i]=dp[i-1]+dp[i-2]*2;
while(cin>>n)
cout<<dp[n]<<endl;
return 0;
}