状态机DP

简介

简单来说就是从一个状态变成另一个状态的路径

感觉还是挺新颖的.

714

https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/

code

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        if(prices.size() == 0) return 0;
        // 没有冷冻期
        vector<vector<int>> dp(prices.size(), vector<int>(2));
        dp[0][0] = 0; // 表示第 i 天交易完后手里没有股票的最大利润
        dp[0][1] = -prices[0]; // 表示第 i 天交易完后手里持有一支股票的最大利润(i 从 00 开始)。
        for(int i=1; i<prices.size(); i++){
            dp[i][0] = max(dp[i-1][1] - fee + prices[i], dp[i-1][0]); // 前一天买入的卖出   前一天清空了股票
            dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]); // 继续持有 或者卖出后买入
        }
        return dp[prices.size() - 1][0];
    }
};
上一篇:使用策略模式改造代码坏味道,让代码更有质量


下一篇:leetcode 714