不容易系列之(3)—— LELE的RPG難題
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在衆多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
分析:
很明顯,n個格子只需要先塗n-1個,再塗一個就好,但是有一個問題,題目中要求了第一個和最後一個不能是同一種顏色,所以n-1個的時候兩端是兩種不同的顏色,那麼此時再塗最後一個湊成n個的時候就是1種了,所以就是s[n-1]*1。 而很明顯,n個格子,第n-1個是可以和第一個同色的,那麼同色的時候,是s[n-2]*1*2。所以就是這兩種方案,加起來就好。綜上:s[n]=s[n-1]+s[n-2]*2
代碼如下:
#include <stdio.h>
int main()
{
int i,n;
__int64 a[51]={0,3,6,6};
for (i=4;i<51;i++)
a[i]=a[i-1]+a[i-2]*2;
while (scanf("%d",&n)!=EOF)
printf("%I64d\n",a[n]);
return 0;
}