您的位置:首页 > 科技 > 能源 > 软件开发五个阶段_深圳航空人工服务电话_百度投诉中心24人工客服_搜索百度网页版

软件开发五个阶段_深圳航空人工服务电话_百度投诉中心24人工客服_搜索百度网页版

2025/4/22 2:59:28 来源:https://blog.csdn.net/weixin_41554427/article/details/147261539  浏览:    关键词:软件开发五个阶段_深圳航空人工服务电话_百度投诉中心24人工客服_搜索百度网页版
软件开发五个阶段_深圳航空人工服务电话_百度投诉中心24人工客服_搜索百度网页版

目录

题目描述

第一步,明确并理解dp数组及下标的含义

第二步,分析并理解递推公式

第三步,理解dp数组如何初始化

第四步,理解遍历顺序

代码


题目描述

本题属于动态规划类问题。

第一步,明确并理解dp数组及下标的含义

dp[i][0]表示从第0天到第i天为止,处于持有股票的状态下,账户里的最大金额。

dp[i][1]表示从第0天到第i天为止,处于不持有股票的状态下,账户里的最大金额。

按照这个定义dp[n-1][1]就是问题的答案。

        int n = prices.size();//dp[i][0]表示从第0天到第i天为止,处于持有股票的状态下,账户里的最大金额//dp[i][1]表示从第0天到第i天为止,处于不持有股票的状态下,账户里的最大金额vector<vector<int>> dp(n);

第二步,分析并理解递推公式

从第0天到第i天为止,导致持有股票的状态有两种可能的原因:一是第0天到第i-1天的某一天买入了股票,对应dp[i-1][0]。二是第i天买入了股票,需要支付prices[i]。

            dp[i][0] = max(dp[i-1][0],-prices[i]);

从第0天到第i天为止,导致不持有股票的状态有两种可能的原因:一是从第0天到第i-1天为止就是不持有股票的状态(此情况下,第i天没法卖出股票)。二是第i天卖出了股票,第i天能卖出股票的前提是从第0天到第i-1天为止是持有股票的状态。

            dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);

        for(int i = 1;i < n;i++){//从第0天到第i天为止,导致持有股票的状态有两种可能的原因,//一是第0天到第i-1天的某一天买入了股票,对应dp[i-1][0]//二是第i天买入了股票,需要支付prices[i]dp[i][0] = max(dp[i-1][0],-prices[i]);//从第0天到第i天为止,导致不持有股票的状态有两种可能的原因://一是从第0天到第i-1天为止就是不持有股票的状态(此情况下,第i天没法卖出股票)//二是第i天卖出了股票,第i天能卖出股票的前提是从第0天到第i-1天为止是持有股票的状态dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);}

第三步,理解dp数组如何初始化

        dp[0][0] = -prices[0]; //表示买入了第0天的股票,手里账户金额是负数

        dp[0][1] = 0;  //表示到第0天为止,不持有股票即不买入第0天的股票的话,账户金额是0

        dp[0][0] = -prices[0]; //表示买入了第0天的股票,手里账户金额是负数dp[0][1] = 0;  //表示到第0天为止,不持有股票即不买入第0天的股票的话,账户金额是0

第四步,理解遍历顺序

第i天的状态依赖于第i-1天的状态,因此i的遍历顺序应该从小到大。

代码

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();//dp[i][0]表示从第0天到第i天为止,处于持有股票的状态下,账户里的最大金额//dp[i][1]表示从第0天到第i天为止,处于不持有股票的状态下,账户里的最大金额vector<vector<int>> dp(n);for(int i = 0;i < n;i++){dp[i].resize(2);}dp[0][0] = -prices[0]; //表示买入了第0天的股票,手里账户金额是负数dp[0][1] = 0;  //表示到第0天为止,不持有股票即不买入第0天的股票的话,账户金额是0for(int i = 1;i < n;i++){//从第0天到第i天为止,导致持有股票的状态有两种可能的原因,//一是第0天到第i-1天的某一天买入了股票,对应dp[i-1][0]//二是第i天买入了股票,需要支付prices[i]dp[i][0] = max(dp[i-1][0],-prices[i]);//从第0天到第i天为止,导致不持有股票的状态有两种可能的原因://一是从第0天到第i-1天为止就是不持有股票的状态(此情况下,第i天没法卖出股票)//二是第i天卖出了股票,第i天能卖出股票的前提是从第0天到第i-1天为止是持有股票的状态dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[n-1][1];}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com