zoukankan      html  css  js  c++  java
  • 变态走楼梯

    题目描述

    走楼梯:
    N阶楼梯,每次1~M步,不走前两次走过的步数的约束
    求走法数量?

    走楼梯的变种,添加不走和前两步同步数的走法。

    public class Main3 {
        public Main3() {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            scanner.close();
    
            fib(n, m, -1, -1);
            System.out.println(count % (1000000007));
        }
        
        private long count = 0;
        /**
         * @param pre1 前第二步
         * @param pre2 前一步
         * */
        void fib(int n, int m, int pre1, int pre2) {
            if (n == 0) {
                count++;
                return ;
            }
            if (n < 0 ) return ;
            for (int i = 1; i <= m; i++) {
                if (i == pre1 || i == pre2) continue;
                fib(n - i, m, pre2, i);
            }
        }
        public static void main(String[] args) {
            new Main3();
        }
    }
    

    递归解法时间复杂度很大,但是这个复杂度不是来自于子问题,对于<int n, int m, int pre1, int pre2>这四个变量来说,几乎没有相同的子问题,于是使用备忘录记录子问题的方式是效果不大的。

    还有什么方式能优化呢?

    • 动态规划?
    • 统计数学规律?
  • 相关阅读:
    mac crontab
    mac 修改MAC代码
    python 二叉树计算器
    python 验证码识别
    scp 上传和下载文件
    centos 开机执行的命令
    centos aws 修改使用密码ssh登录
    python nose测试
    C# linq to xml
    Visual Studio 2015+InstallShield 2015
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/13611129.html
Copyright © 2011-2022 走看看