hdu 2563 统计问题

来源:互联网 发布:淘宝售前客服用语 编辑:程序博客网 时间:2024/05/21 13:08

递推题一般比较容易做,都是根据前面几个状态来推断当前状态。这道题可以从前面状态横走跟直走的数量来推断现态。用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;
}

0 0
原创粉丝点击