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

题意:排成一行的格子上,每个格子可以涂三个颜色,要求相邻颜色不能相同,首尾颜色也不能相同。初一看,排列组合,无奈数学太差,公式没推出来。
这时才发现,计算机递推的好处,比如n长的格子,可以看成是满足条件n-1加一个固定颜色加上一个n-1是与头颜色相同的格子加上最后有两个选择,相当于(n-2)*2个选择。所以推出a(n)=a(n-1)+a(n-2)*2

#include<cstdio>
#include<cstring>
using namespace std;
long long a[55];
int main()
{
    int n;
    a[1]=3,a[2]=a[3]=6;
    for(int i=4;i<55;i++)
        a[i]=a[i-1]+a[i-2]*2;
    while(~scanf("%d",&n))
    {
       printf("%lld\n",a[n]);
    }
}

你可能感兴趣的:(hdu2045不容易系列之(3)—— LELE的RPG难题)