6
问题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2045
首先这个题目需要自己画出一个盒子的时候即f(1)=3肿方法,f(2)=6种方法这时还看不出来什么规律,再继续看f(3)=6,这时的f(3)中三中颜色必需都要用到
在看到f(4)=18,在三个盒子的基础上增加一个盒子,第三个位置上的盒子本来是不允许与第一位的盒子同色的,即可以多出来一种去乘两个盒子时的次数,增加的那个
盒子不能与第一个位置同色,所以它有两种去乘第三个盒子的次数,后面的类推都是考虑增加后倒数第二位可以再多一种颜色,和最后一位只能有两种颜色
**注意点,考虑到50次,int装不下,需要用 long long int
要了解一点排列组合的知识
代码附上
#include<stdio.h> int main() { __int64 a[55]; int i; a[0]=3; //c[0]是C(3,1)=3,数列的写法,从三个里面选一个 a[1]=6; //c[1]是C(3,1)*C(2,1)=6,数列的写法,从两个个里面选一个 a[2]=6; //c[2]是C(3,1)*C(2,1)*C(1,1)=6,数列的写法,从一个里面选一个 for( i=3;i<=55;i++)//不理解解释参考上文分析 a[i]=a[i-1]+a[i-2]*2; int n; while(scanf("%d",&n)!=EOF){ printf("%I64d\n",a[n-1]); } return 0; }