URAL1225——DP——Flags
大意:蓝色必须在红白之间,对于动态规划,只要考虑当前状态是怎么来的,当前状态可以由n-1转移过来,红和白,也可以由n-2转移过来(n-1为蓝色固定好了)红蓝,白蓝,把蓝色看成是与白红相关的一个整体,不是单独的一个元素
所以得到 f[n] = f[n-1] + f[n-2]
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
long long dp[50];
int n;
while(~scanf("%d",&n)){
dp[1] = 2;
dp[2] = 2;
for(int i = 3; i <= n; i++)
dp[i] = dp[i-1] + dp[i-2];
printf("%lld\n",dp[n]);
}
return 0;
}

浙公网安备 33010602011771号