网站建设自检自查,wordpress 左右风格主题,wordpress本地运行,网站设计技术方案动态规划
思路#xff1a; 假设 dp[i][0] 是第 i 天手上没有股票时的最大利润#xff0c; dp[i][1] 是第 i 天手上有 1 支股票的最大利润#xff1b;dp[i][0] 的迁移状态为#xff1a; dp[i - 1][0]#xff0c;前一天手上已经没有股票#xff0c;没有发生交易#xff1…动态规划
思路 假设 dp[i][0] 是第 i 天手上没有股票时的最大利润 dp[i][1] 是第 i 天手上有 1 支股票的最大利润dp[i][0] 的迁移状态为 dp[i - 1][0]前一天手上已经没有股票没有发生交易dp[i - 1][1] prices[i]前一天手上有 1 支股票第 i 天将其卖掉获得收益 prices[i]所以 dp[i][0] max(dp[i - 1][0], dp[i - 1][1] prices[i])同理 dp[i][1] 的迁移状态 dp[i - 1][1]前一天手上有1支股票第 i 天继续持有不发生交易dp[i - 1][0] - prices[i]前一天手上没有股票第 i 天买入股票所以dp[i][1] max(dp[i - 1][1], dp[i - 1][0] - prices[i])初始状态 dp[0][0] 0, dp[0][1] -prices[0]使用动态规划方法将所有可能的值穷举出来则最大的收益为 dp[size - 1][0]
class Solution {
public:int maxProfit(vectorint prices) {int size prices.size();int dp[size][2];dp[0][0] 0;dp[0][1] -prices[0];for (int i 1; i size; i) {dp[i][0] std::max(dp[i - 1][0], dp[i - 1][1] prices[i]);dp[i][1] std::max(dp[i - 1][1], dp[i - 1][0] - prices[i]);}return dp[size - 1][0];}
};