HDU 2563 统计问题

来源:互联网 发布:win10软件很模糊 编辑:程序博客网 时间:2024/05/20 11:50

统计问题

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

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

     这道题在纸上画一画就想出来了。第一个点向上走一下,左右共走两下,共3中情况。第二步前一步向上的可以再分成一个向上的和两个左右的,前一步左右的只能分成一个向上的和一个左右的。以此类推,每个向上的可以分成3个,及一个向上两个左右,每个左右的可以分为一个向上一个左右。循环最多20次。建结构体。

#include<cstdio>#include<cstring>using namespace std;struct step{    int up,rl,sum;};step a[20];int main(){    int n,i,c;    scanf("%d",&c);    while(c--)    {        memset(a,0,sizeof(a));        scanf("%d",&n);        a[0].up=1;        a[0].sum=1;        a[0].rl=0;        for(i=1; i<=n; i++)        {            a[i].up=a[i-1].sum;            a[i].rl=2*a[i-1].up+a[i-1].rl;            a[i].sum=a[i].rl+a[i].up;        }        printf("%d\n",a[n].sum);        memset(a,0,sizeof(a));    }    return 0;}


1 0
原创粉丝点击