zoukankan      html  css  js  c++  java
  • [每日一题]LintCode1861 老鼠跳跃

    忽略奇数偶数步,忽略胶水,就是一个一维dp,例如只能走1 2 4步,dp[n] = dp[n - 1] + dp[n - 2] + dp[n - 4] (当然要注意最后的台阶要单独处理  因为可以到负的层次)

    加上奇数偶数步,那就是一个二维dp, dp[0][j]表示偶数步到i层,dp[1][i]表示奇数步到i层

    初始化dp为0,dp[0][0] = 1,注意dp[1][0]是不为1的,因为第一步只能是奇数步

    加上胶水的条件,只需要判断当前台阶是否有胶水,如果有continue,即可这样到这个台阶的走法为0,也对后来的台阶没有影响

    最后在加上MOD的条件,即可。

    class Solution {
    public:
        /**
         * @param arr: the steps whether have glue
         * @return: the sum of the answers
         */
        const long long MOD = 1e9 + 7;
        long long dp[2][50010];
        int ratJump(vector<int> &arr) {
            // Write your code here.
            memset(dp, 0, sizeof(dp));
            dp[0][0] = 1;
          //  cout << MOD << endl;
            int n = arr.size();
            for(int i = 1; i < n - 1; i++)
            {
                if(arr[i]) continue;
                dp[0][i] = (dp[0][i] + dp[1][i - 1]) % MOD;
                dp[1][i] = (dp[1][i] + dp[0][i - 1]) % MOD;
                if(i >= 2) dp[1][i] = (dp[1][i] + dp[0][i - 2]) % MOD;
                if(i >= 3) dp[0][i] = (dp[0][i] + dp[1][i - 3]) % MOD;
                if(i >= 4) dp[0][i] = (dp[0][i] + dp[1][i - 4]) % MOD, dp[1][i] = (dp[1][i] + dp[0][i - 4]) % MOD;
            }
            dp[0][n - 1] = (dp[0][n - 1] + ((dp[1][n - 1 - 1] + dp[1][n - 1 - 1]) % MOD + dp[1][n - 1 - 1]) % MOD) % MOD;
            dp[1][n - 1] = (dp[1][n - 1] + ((dp[0][n - 1 - 1] + dp[0][n - 1 - 1]) % MOD + dp[0][n - 1 - 1]) % MOD) % MOD;
            if(n - 1 >= 2)
                dp[1][n - 1] = (dp[1][n - 1] + dp[0][n - 1 - 2] * 2 % MOD) % MOD, dp[0][n - 1] = (dp[0][n - 1] + dp[1][n - 1 - 2] * 2 % MOD) % MOD;
            if(n -  1 >= 3) dp[0][n - 1] = (dp[0][n - 1] + dp[1][n - 1 - 3] * 2 % MOD) % MOD, dp[1][n - 1] = (dp[1][n - 1] + dp[0][n - 1 - 3]) % MOD; 
            if(n - 1 >= 4) dp[0][n - 1] = (dp[0][n - 1] + dp[1][n - 1 - 4]) % MOD, dp[1][n - 1] = (dp[1][n - 1] + dp[0][n - 1 - 4]) % MOD;
            return (dp[0][n - 1] + dp[1][n - 1]) % MOD; 
        }
    };
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    致敬尤雨溪,Vue.js 让我赚到了第一桶金
    JavaScript 构造树形结构的一种高效算法
    Webpack 4 Tree Shaking 终极优化指南
    腾讯前端面试题:一言不合就写个五子棋
    使用Web代理实现Ajax跨域
    Extjs 4 chart自定义坐标轴刻度
    五分钟了解浏览器的工作原理
    面试官:JavaScript 原始数据类型 Symbol 有什么用?
    JavaScript 初学者容易犯的几个错误,你中招没?
    帮助你更好的理解Spring循环依赖
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/14693974.html
Copyright © 2011-2022 走看看