题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2045

思路:n==1时,有3种涂法;n==2时,有6种涂法;n==3时,有6种涂法;当n>=4时就要分两种情况讨论:1.当第n-1个和第1个不是同种颜色,有ans(n-1)种涂法。2.当第n-1个和第1个是同种颜色,有2ans(n-2)涂法。即 ans(n)=ans(n-1)+2ans(n-2)
由于题目中n最大为50,我使用 __int64,printf时使用的占位符为%I64d。
代码:
#include <stdio.h>
int main()
{
int n,i;
while (scanf("%d", &n) != EOF)
{
__int64 ans[55];
ans[1] = 3; ans[2] = 6;ans[3] = 6;
for (i = 4; i <= n; i++)
{
ans[i] = ans[i - 1] + 2*ans[i - 2];
}
printf("%I64d\n", ans[n]);
}
return 0;
}
题外
探究 __int64 与 long long 类型的区别:


网友评论