您的位置:首页 > 其它

hdu 2563 统计问题

2016-07-09 15:51 155 查看
递推题一般比较容易做,都是根据前面几个状态来推断当前状态。这道题可以从前面状态横走跟直走的数量来推断现态。用l[i]记录当前状态下最后一步是直走的路径数,用h[i]记录当前最后一步是横走的路径数,用sum[i]记录总的路径数,即sum[i] = h[i] + l[i];

重点在h[i]跟l[i]怎么递推而来。

这个比较容易。

如果当前最后一步是直走,那么下一步可以直走或是横走两个方向。

如果当前最后一步是横走,那么下一步只能直走或是横走一个方向。

 

由此可得

不管i-1怎么走,第i步总能直走 所以 l[i] = sum[i -1];

i - 1步直走的时候,第i步可以有两个横走,i- 1步横走的时候,第i步只有一个横走。故h[i] = h[i-1] + l[i-1] * 2;

 

#include<stdio.h>

int
 sum[32]
= {
0, 3, 7};

int
 h[32]
= {
0, 2, 4};

int
 l[32]
= {
0, 1, 3};

int main()

{

    int
 T, n, i;

    scanf("%d",
&
T);

    for(
 i = 3 ; i < 31 ; i++)

    {


        l[i] = sum[i-1];

        h[i] = h[i-1]
+
 l[i-1]
*
 2;

        sum[i] = h[i]
+
 l[i];

    }

    while(
T--)

    {


        scanf("%d",
&
n);

        printf("%d\n", sum[n]);

    }

    return
 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: