<pre name="code" class="html">//题意是中文的 大家都看得懂
//方法:dp[i]就是长度为i有多少种
// 考虑第i块时分为两种情况
// 第n-1块与第n-2块同色时的种数有 dp[n-2]种 第n块有3种可能
// 这样就有 3*dp[n-2] 种
// 第n-1块与第n-2块不同色时的种数有 dp[n-1]-dp[n-2]种 第n块只能为其中的任意一种颜色
// 这样就有 2*(dp[n-1]-dp[n-2]) 种
// 相加得 2*dp[n-2] + dp[n-2]
// dp[i] = 2 * dp[i-1] + dp[i-2];
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "algorithm"
#include <queue>
#include <stack>
#include <math.h>
using namespace std;
long long int dp[105];
int main()
{
int t, n;
scanf("%d", &t);
dp[1] = 3; dp[2] = 9;
for(int i = 3; i <= 21; i++)
dp[i] = 2 * dp[i - 1] + dp[i - 2];
while(t--)
{
scanf("%d", &n);
printf("%lld\n", dp[n]);
}
return 0;
}
HDU 2569(递推)
最新推荐文章于 2020-04-08 16:14:11 发布