传送门:HDU - 2045: 不容易系列之(3)—— LELE的RPG难题
题意:排成一排的n个格子,用红、粉、绿三色去涂格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法。
思路: n个格子的涂法分两种情况:
1、第n-1个格子和第1个格子同色,这时有f(n-2)种涂法,而第n个格子有两种涂法,所以共有2*f(n-2)种涂法;
2、第n-1个格子和第1个格子不同色,这时有f(n-1)种涂法,且第n个格子只有一种涂法,所以共有f(n-1)种涂法。
两种情况相加,所以有递推公式:
f(n)=2∗f(n−2)+f(n−1)
f
(
n
)
=
2
∗
f
(
n
−
2
)
+
f
(
n
−
1
)
,
(n≥4)
(
n
≥
4
)
注意:f(1)=3 , f(2)=6 , f(3)=6
AC代码:
#include<iostream>
using namespace std;
#define LL long long
LL a[51];
int main()
{
int n;
a[1]=3;a[2]=6;a[3]=6;
for(int i=4; i<=50; i++)
a[i]=2*a[i-2]+a[i-1];
while(cin>>n)
cout<<a[n]<<endl;
return 0;
}