HDOJ:【2】2045不容易系列之(3)—— LELE的RPG难题

原题目:

http://acm.hdu.edu.cn/showproblem.php?pid=2045

该题目的标签就写着要使用递推的方式,用组合数的方法写了很久没写出来,看了大神的解释才终于明白了。

 主要思路:

由于要涂的颜色一共就有3种,所以当N≤3时,是特殊情况,需要单独考虑。

当N=1时,有3种选择;当N=2时,有6种选择;当N=3时,有6种选择。

当N≥4时,考虑任意长度的序列N,分以下两种情况:

  1. 第N-1个与第1个颜色相同时,那么第N个有两种选择,此时情况数其实是N-2时情况数再乘以2(因为第N-1个已经唯一确定了)。
  2. 第N-1个与第1个颜色不同时,那么第N个只有一种选择,此时情况数为N-1时的情况数。

综上,递推表达式可以表示为:f(N)=f(N-1)+2*f(N-2)

源代码:

#include 
using namespace std;
int main()
{
	int N;
	unsigned long long int cal[55];
	cal[1] = 3;
	cal[2] = 6;
	cal[3] = 6;
	for(int i = 4; i <= 54; i++)
	{
		cal[i] = cal[i-1] + cal[i-2]*2;
	}
	while(scanf("%d",&N) != EOF)
	{
		printf("%llu\n",cal[N]);
	} 
	return 0;
}

 

你可能感兴趣的:(HDOJ)