hdu 2563 统计问题

来源:互联网 发布:海岛奇兵金库升级数据 编辑:程序博客网 时间:2024/05/20 12:50

统计问题

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4425    Accepted Submission(s): 2578


Problem Description

 

在一无限大的二维平面中,我们做如下假设:
1、  每次只能移动一格;
2、  不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、  走过的格子立即塌陷无法再走第二次;

求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
 


 

Input

 

首先给出一个正整数C,表示有C组测试数据
接下来的C行,每行包含一个整数n (n<=20),表示要走n步。
 


 

Output

 

请编程输出走n步的不同方案总数;
每组的输出占一行。
 


 

Sample Input

 

212
 


 

Sample Output

 

37

 

/*
把每一步到达的位置看做点来对待,
则这些点可以分为两类:
第一类是从该点出发可以可以到达3个方向,
第二类是从该点出发可以到达2个方向。

第一步到3个点:一类点1个,二类点2个;(因此一类点初始化为1个即:f[0]=1;)
第二步扩展到7=1*3+2*2个点:一类点3个正好是上一步的总个数,二类点4个;
第三步有17=3*3+4*2种走法。。。。。。

故规律为:
f[n]=f[n-1]*2+f[n-2];
*/

#include<stdio.h>#include<math.h>#define N 21int f[N]={1,3};int main(){ int n,i; for(i=2;i<N;i++)  f[i]=f[i-1]*2+f[i-2];       scanf("%d",&n); while(n--) {  scanf("%d",&i);  printf("%d\n",f[i]); } return 0;}  

原创粉丝点击