标签:
1 2
3 6
#include <stdio.h> int main() { int a; //一定要用long long类型,或者__int64,不然int类型装不下 __int64 c[51]; //c[0]是C(3,1)=3,数列的写法,从三个里面选一个 //c[1]是C(3,1)*C(2,1)=6,数列的写法,从两个个里面选一个 //c[2]是C(3,1)*C(2,1)*C(1,1)=6,数列的写法,从一个里面选一个 c[0] = 3; c[1] = 6; c[2] = 6; //如果N>3,那么从第三个开始的每一个的前n-1个都有两种情况 //1. 前n-1个与第一个相同 // 那么,由于前n-2个都是符合要求的(相邻颜色各不相同),所以第n个 // 有两种选法,那么总共有 2*c[i-2]种 //2. 前n-1个与第一个不相同 // 那么,第n个的颜色就已经确定了(因为只有三种颜色,且其中两种颜色被第一个格子和第n-1个格子占了) // 所以,这种情况下总共有 c[i-1]种 //两个相加,就是当前的种数(注意是n>3时) for (int i=3; i<51; i++) { c[i] = c[i-1] + 2*c[i-2]; } while(scanf("%d", &a)!=EOF) { printf("%I64d\n", c[a-1]); } return 0; }
HDU 2045 不容易系列之(3)—— LELE的RPG难题
标签:
原文地址:http://blog.csdn.net/a237653639/article/details/46411019