HDU 2045 不容易系列之(3)—— LELE的RPG难题

解题报告:

题目大意:给你一个n,表示有n个排成一条直线的方格,现在有红、粉、绿三种颜色,用着三种颜色将这个n个方格涂满,涂色的规则是相邻的两个方格的颜色不能相同,

并且最后一格跟第一格的颜色不能相同,要求一共有多少涂色的方法。

也是一道动态规划题,若现在要求有n个方格时有多少种涂色方法,可以把它化为两个子问题来 求解,第一,当第n-1个方格涂的颜色与第一格的颜色相同时,而第n-1格的颜色与第一格颜色相同的情况可以由n-2格的结果得到,因为当有n-2个方格的情况的时候,要求的就是最后一格不能与第一格的颜色相同,于是就可以看成是将n-2的情况直接在后面加上一种与第一格相同的颜色,就得到了当第n-1格的颜色与第一格的颜色相同的情况。而当第n-1格的颜色与第一格相同时,第n格的涂色方案就可以是两种了。接下来就考虑另一种子问题,即当第n-1格的颜色与第一格的颜色不同时,那么第n格的涂色方案很明显就只有一种了,于是将这两种子问题加起来就得到有n个方格时涂色方案的种数。

View Code
 1 #include<stdio.h>
 2 __int64 DP[55],n;
 3 void dabiao() {
 4     DP[1]=3;
 5     DP[2]=DP[3]=6;
 6     for(int i=4;i<=51;++i)
 7     DP[i]=DP[i-1]+DP[i-2]*2;
 8 }
 9 int main() {
10     dabiao();
11     while(scanf("%I64d",&n)!=EOF)
12     printf("%I64d\n",DP[n]);
13     return 0;
14 }
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3074462.html