Daliy Algorithm (动态规划,思维)-- day 77

Nothing to fear


种一棵树最好的时间是十年前,其次是现在!

那些你早出晚归付出的刻苦努力,你不想训练,当你觉的太累了但还是要咬牙坚持的时候,那就是在追逐梦想,不要在意终点有什么,要享受路途的过程,或许你不能成就梦想,但一定会有更伟大的事情随之而来。 mamba out~

2020.5.9


人一我十,人十我百,追逐青春的梦想,怀着自信的心,永不言弃!

lc-96. 不同的二叉搜索树

class Solution {
public:
    int numTrees(int n) {
        vector<long long> dp(n + 1);
        dp[0] = 1,dp[1] = 1;
        for(int i = 2;i <= n ;i ++)
        {
            dp[i] = dp[i-1]*(4*i-2)/(i+1);
        }
        return dp[n];
    }
};

lc-714. 买卖股票的最佳时机含手续费

dp1 : 第i天手上有股票得最大价值
dp2 : 第i天手上无股票得最大价值

dp1[i] = max(前i天股票得最大收益,买入今天得股票得收益)
dp2[i] = max(前一天没股票得最大收益,前i天得股票再今天卖掉)

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int n = prices.size();
        vector<int> dp1(n+1),dp2(n+1);
        dp1[0] = -prices[0];
        for(int i = 1;i < n ;i ++)
        {
            dp1[i] = max(dp1[i-1],dp2[i-1] - prices[i]);
            dp2[i] = max(dp2[i-1],dp1[i-1] + prices[i] - fee);
        }
        return dp2[n-1];
    }
};

lc-120. 三角形最小路径和

数字三角形模型

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int n = triangle.size();
        vector<vector<int>> f(n , vector<int>(n,0x3f3f3f));
        for(int i = 0;i < n ;i ++)
        {
            for(int j = 0;j < triangle[i].size() ;j ++)
            {
                if(i == 0)f[i][j] = triangle[i][j];
                else if(i != 0 && j == 0)f[i][j] = f[i-1][j] + triangle[i][j];
                else f[i][j] = min(f[i-1][j],f[i-1][j-1]) + triangle[i][j];
            }
        }
        int ans = 0x3f3f3f;
        for(int i = 0;i < n ;i ++)ans = min(ans,f[n-1][i]);
        return ans;
    }
};

lc-1227. 飞机座位分配概率

智力题吧 我也能秒杀智力题了


class Solution {
public:
    double nthPersonGetsNthSeat(int n) {
        return (n == 1) ? 1 : 0.5;
    }
};
posted @ 2020-05-10 23:43  _starsky  阅读(121)  评论(0编辑  收藏  举报