HDUOJ2045—— LELE的RPG难题&环形涂色问题

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


Problem Description
人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:

有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.

以上就是著名的RPG难题.

如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧?
 

Input
输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0

Output
对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。

Sample Input
1
2

Sample Output
3
6
 

 

代码如下

#include 
#include 

int main(int argc, char *argv[])
{
	int n, m, i;
	long long int An;
	m = 3;
	while(scanf("%d", &n) != EOF)
	{		
		if(n == 1)
		{
			printf("3\n");
			continue;
		}

		An = 1;
		// An = (-1)^n*(m-1) + (m-1)^n 	(n>=2)
		// An:n个格子得染色方案数  n:n个格子 m:颜色数量
		m = m-1;	// (m-1)
		for(i=0; i

【分析】

有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色。我们可以把问题抽象成一个圆环分成n块区域需要染色,可以染R、P、G三种颜色,相邻区域颜色不能相同。

HDUOJ2045—— LELE的RPG难题&环形涂色问题_第1张图片

1,观察分析

图A:按要求有 3*2=6 种涂色方案

图B:观察可知有 3*2*1=6种涂色方案

图C:通过间接求法。假设4块区域涂法依次有3、2、2、2种,则需要减去首尾相同颜色得情况(把首尾相同颜色时看作一块,即此时只有3块,如图B),故有 3*2*2*2-6=18 种涂色方案

图D:类似图C得解法,假设5块区域涂法依次有3、2、2、2、2种,则需要减去首尾相同颜色得情况(如图C),故有3*2*2*2*2-18=30种涂色方案

图E:类似图D的解法,假设6快区域涂法依次有3、2、2、2、2、2种,则需要减去首尾相同颜色得情况(如图D),故有3*2*2*2*2*2-30=66种涂色方案

若n个区域有3种颜色可供选用,那么有多少种不同的涂法?

a_{n}=3*2^{n-1}-a_{n-1} =(2+1)*2^{n-1}-a_{n-1} =2^n+2^{n-1}-a_{n-1} (n\geqslant 3)

2.猜想递推公式

a_{1} = 3

a_{2}=3*2=(2+1)*2=2^2+2

a_{3}=2^3+2^2-a2=2^3-2

a_{4}=2^4+2^3-a_{3}=2^4+2

a_{5}=2^5+2^4-a_{4}=2^5-2

故可以推出通项 a_{n}=(-1)^n*2+2^n (n\geqslant 2)

3.结论

已知 P 是 n (n\geqslant 3) 边形内的一点,它与 n 个顶点相连构成n个三角形,记为 M_{1}M_{2}、···、M_{n},现取 m(m\geqslant 3) 种颜色对这 n 个三角形涂色,每相邻的两个三角形的涂色不同,试求涂色的方案有多少种?

HDUOJ2045—— LELE的RPG难题&环形涂色问题_第2张图片

故得递推公式a_{n}=m*(m-1)^{n-1}-a_{n-1} (n\geq 3)

通项a_{n}=(-1)^n*(m-1)+(m-1)^n (n\geqslant 2,m\geqslant 3)

 

 

 

你可能感兴趣的:(从零开始的学习生活)