关闭

hdu 2563 统计问题

535人阅读 评论(0) 收藏 举报
分类:

统计问题

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

 

2 1 2
 


 

Sample Output

 

3 7

 

/*
把每一步到达的位置看做点来对待,
则这些点可以分为两类:
第一类是从该点出发可以可以到达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 21
int 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;
}
 
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    座右铭
    Stay foolish,stay hungry!
    个人资料
    • 访问:231052次
    • 积分:5348
    • 等级:
    • 排名:第5315名
    • 原创:318篇
    • 转载:23篇
    • 译文:0篇
    • 评论:22条
    最新评论