• hdu2563——统计问题


    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

    有些统计问题能够直接通过多算几步找出规律。但这个仅仅算三步就能让人吐血,所以还是得分析过程的变化规律

    设f[n]为第n步的方案,a[n]为向上走的方案。b[n]为向左右走的方案

    易得f[n]=a[n]+b[n];

    而上一步无论是向哪里走,这一步都能够向上走。所以a[n]=a[n-1]+b[n-1]=f[n-1];

    假设上一步向左走。那么这步除了向上就仅仅能向左走,所以本来b[n]=2*(a[n-1]+b[n-1])。但少了左右的一种情况,要减去b[n-1]。所以b[n]=2*a[n-1]+b[n-1];

    把上面两个式子带入f[n]得

    f[n]=2*(a[n-1]+b[n-1])+a[n-1]=2*f[n-1]+f[n-2];

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    int main()
    {
        int n,i,j,m,a[30];
        scanf("%d",&n);
        while(n--)
        {
            a[0]=3;
            a[1]=7;
            scanf("%d",&m);
            for(i=2;i<m;++i)
                a[i]=2*a[i-1]+a[i-2];
            printf("%d
    ",a[m-1]);
        }
        return 0;
    }
    



  • 相关阅读:
    javascript运行机制
    ios-scroll 和系统设置overflowscroll后卡顿
    input属性autocomplate背景颜色
    img 的onload事件和complate事件区别
    image图片之间缝隙bug解决方法
    gulp使用指南
    getQueryString
    decodeURI()和decodeURIComponent()函数
    css样式实现水平方向滚动
    I2C
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6767994.html
Copyright © 2020-2023  润新知