zoukankan      html  css  js  c++  java
  • HDU2563_统计难题_递推

    题目大意: 1、 每次只能移动一格; 2、 不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走); 3、 走过的格子立即塌陷无法再走第二次; 求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。 解题思路: 要分两种情况来考虑,a(n)为向上,b(n)为向左跟向右,f(n)为当前方案数。 a(n) = a(n-1) + b(n-1);因为向上只有一个方向。 b(n) = a(n-1) * 2 + b(n-1);因为之前的向上可以走两个方向,而之前的向左或者向右只能继续按照原来的方向走,因为走过的路会消失。 f(n) = a(n) + b(n); 所以可以推出: f(n) = f(n-1) * 2 + a(n-1) = f(n-1) * 2 + f(n-2); 代码:
    #include
    using namespace std;
    const int MAX = 25;
    int main(void)
    {
        int cas;
        int f[MAX];
        f[0] = 1;
        f[1] = 3;
        for(int i = 2; i < MAX; i++)
            f[i] = 2 * f[i-1] + f[i-2];
        scanf("%d", &cas);
        while(cas--)
        {
            int n;
            scanf("%d", &n);
            printf("%d\n", f[n]);
        }
        return 0;
    }
    
  • 相关阅读:
    简单说说数据库表设计的三种范式
    存储过程简单的动态订单号
    Asp.Net页面生命周期
    jq 小笔记,上传判断其格式
    吃一垫长一智
    离散事件模拟
    二叉树查找树
    冷暖自知
    基督徒的人生箴言
    迷宫寻路
  • 原文地址:https://www.cnblogs.com/cchun/p/2520236.html
Copyright © 2011-2022 走看看