当前位置: 首页 > wzjs >正文

驻马店 网站建设游戏工作室加盟需要什么条件

驻马店 网站建设,游戏工作室加盟需要什么条件,高端品牌女装有哪些,宁波手工活外发加工网目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析明确并理解递推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这道题把第123题推广为一…

目录

题目描述

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

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

1.求dp[i][j].holding

2.求dp[i][j].sold

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

第四步,理解遍历顺序

代码


题目描述

这道题把第123题推广为一般情形。第123题限制最多可以完成两笔交易,这道题改为最多可以完成k笔交易。因此,两道题没有本质区别。仍然用第123题的思路来分析。

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

//最多可以完成k笔交易,用j表示交易的序号,j从0开始起算表示第一次交易,j取值范围是[0,k-1]

//约定好,下文提到的【第j只股票】指的是第j次买入的股票

//dp[i][j].holding表示到第i天结束时,处于持有第j只股票的状态的最大利润

//dp[i][j].sold表示到第i天结束时,处于已经卖出第j只股票但是还没有买入第j+1只股票的状态下的最大利润

    struct State{int holding = 0;int sold = 0;};int n = prices.size();//最多可以完成k笔交易,用j表示交易的序号,j从0开始起算表示第一次交易,j取值范围是[0,k-1]//约定好,下文提到的【第j只股票】指的是第j次买入的股票//dp[i][j].holding表示到第i天结束时,处于持有第j只股票的状态的最大利润//dp[i][j].sold表示到第i天结束时,处于已经卖出第j只股票但是还没有买入第j+1只股票的状态下的最大利润vector<vector<State>> dp(n);for(int i =0;i <n;i++)dp[i].resize(k);

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

1.求dp[i][j].holding

//到第i天结束时处于持有第j只股票的状态,有两种可能的原因:

//一是前一天(第i-1天)结束时就已经处于持有第j只股票的状态(对应dp[i-1][j].holding),第i天什么也不做。

//二是第i天买入了第j只股票(需支付prices[i]),第i天能买入第j只股票的前提是前一天(第i-1天)结束时处于已经卖出第j-1只股票但是还没有买入第j只股票的状态(对应dp[i-1][j-1].sold)。j如果是0就没有第j-1只股票,需要特别处理。

int temp = (j > 0) ? (dp[i-1][j-1].sold) : (0);

dp[i][j].holding = max(dp[i-1][j].holding,temp - prices[i]);

2.求dp[i][j].sold

//到第i天结束时处于已经卖出第j只股票但是还没有买入第j+1只股票的状态,有两种可能的原因:

//一是前一天(第i-1天)结束时就已经处于已经卖出第j只股票但是还没有买入第j+1只股票的状态(对应dp[i-1][j].sold),第i天什么也不做

//二是第i天卖出了第j只股票(收入prices[i]),第i天能卖出第j只股票的前提是前一天(第i-1天)结束时处于持有第j只股票的状态(对应状态dp[i-1][j].holding)

dp[i][j].sold = max(dp[i-1][j].sold,dp[i-1][j].holding + prices[i]);

        for(int i = 1;i < n;i++){for(int j = 0;j < k;j++){//到第i天结束时处于持有第j只股票的状态,有两种可能的原因://一是前一天(第i-1天)结束时就已经处于持有第j只股票的状态(对应dp[i-1][j].holding),第i天什么也不做。//二是第i天买入了第j只股票(需支付prices[i]),第i天能买入第j只股票的前提是前一天(第i-1天)结束时处于已经卖出第j-1只股票但是还没有买入第j只股票的状态(对应dp[i-1][j-1].sold)。j如果是0就没有第j-1只股票,需要特别处理。int temp = (j > 0) ? (dp[i-1][j-1].sold) : (0);dp[i][j].holding = max(dp[i-1][j].holding,temp - prices[i]);//到第i天结束时处于已经卖出第j只股票但是还没有买入第j+1只股票的状态,有两种可能的原因://一是前一天(第i-1天)结束时就已经处于已经卖出第j只股票但是还没有买入第j+1只股票的状态(对应dp[i-1][j].sold),第i天什么也不做//二是第i天卖出了第j只股票(收入prices[i]),第i天能卖出第j只股票的前提是前一天(第i-1天)结束时处于持有第j只股票的状态(对应状态dp[i-1][j].holding)dp[i][j].sold = max(dp[i-1][j].sold,dp[i-1][j].holding + prices[i]);}}

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

for(int j = 0;j <k;j++){

dp[0][j].holding = -prices[0];//到第0天结束时处于持有第j只股票的状态,可以理解为对第0天的股票买了又卖重复j-1次之后再买入

dp[0][j].sold = 0;//到第0天结束时处于已经卖出第j只股票但是还没有买入第j+1只股票的状态,可以理解为对第0天的股票买了又卖重复j次

}

        for(int j = 0;j <k;j++){dp[0][j].holding = -prices[0];//到第0天结束时处于持有第j只股票的状态,可以理解为对第0天的股票买了又卖重复j-1次之后再买入dp[0][j].sold = 0;//到第0天结束时处于已经卖出第j只股票但是还没有买入第j+1只股票的状态,可以理解为对第0天的股票买了又卖重复j次}

第四步,理解遍历顺序

由递推公式

int temp = (j > 0) ? (dp[i-1][j-1].sold) : (0);

dp[i][j].holding = max(dp[i-1][j].holding,temp - prices[i]);

dp[i][j].sold = max(dp[i-1][j].sold,dp[i-1][j].holding + prices[i]);

可知日期的序号i(或者说股价的序号)应该从小到大遍历。

可知买入的股票的序号j,也应该从小到大遍历。

代码

class Solution {struct State{int holding = 0;int sold = 0;};
public:int maxProfit(int k, vector<int>& prices) {int n = prices.size();//最多可以完成k笔交易,用j表示交易的序号,j从0开始起算表示第一次交易,j取值范围是[0,k-1]//约定好,下文提到的【第j只股票】指的是第j次买入的股票//dp[i][j].holding表示到第i天结束时,处于持有第j只股票的状态的最大利润//dp[i][j].sold表示到第i天结束时,处于已经卖出第j只股票但是还没有买入第j+1只股票的状态下的最大利润vector<vector<State>> dp(n);for(int i =0;i <n;i++)dp[i].resize(k);for(int j = 0;j <k;j++){dp[0][j].holding = -prices[0];//到第0天结束时处于持有第j只股票的状态,可以理解为对第0天的股票买了又卖重复j-1次之后再买入dp[0][j].sold = 0;//到第0天结束时处于已经卖出第j只股票但是还没有买入第j+1只股票的状态,可以理解为对第0天的股票买了又卖重复j次}for(int i = 1;i < n;i++){for(int j = 0;j < k;j++){//到第i天结束时处于持有第j只股票的状态,有两种可能的原因://一是前一天(第i-1天)结束时就已经处于持有第j只股票的状态(对应dp[i-1][j].holding),第i天什么也不做。//二是第i天买入了第j只股票(需支付prices[i]),第i天能买入第j只股票的前提是前一天(第i-1天)结束时处于已经卖出第j-1只股票但是还没有买入第j只股票的状态(对应dp[i-1][j-1].sold)。j如果是0就没有第j-1只股票,需要特别处理。int temp = (j > 0) ? (dp[i-1][j-1].sold) : (0);dp[i][j].holding = max(dp[i-1][j].holding,temp - prices[i]);//到第i天结束时处于已经卖出第j只股票但是还没有买入第j+1只股票的状态,有两种可能的原因://一是前一天(第i-1天)结束时就已经处于已经卖出第j只股票但是还没有买入第j+1只股票的状态(对应dp[i-1][j].sold),第i天什么也不做//二是第i天卖出了第j只股票(收入prices[i]),第i天能卖出第j只股票的前提是前一天(第i-1天)结束时处于持有第j只股票的状态(对应状态dp[i-1][j].holding)dp[i][j].sold = max(dp[i-1][j].sold,dp[i-1][j].holding + prices[i]);}}int max_profit = 0;for(int j = 0;j < k;j++){if(dp[n-1][j].sold > max_profit)max_profit = dp[n-1][j].sold;}return max_profit;}
};

把本题的代码中的k改成2,直接可以用作123. Best Time to Buy and Sell Stock III的答案。


文章转载自:

http://taZYLLpg.tnnfy.cn
http://qn9chEWR.tnnfy.cn
http://mcaKmKnh.tnnfy.cn
http://LOJnOt7p.tnnfy.cn
http://Pf0Dttbg.tnnfy.cn
http://REDdMul2.tnnfy.cn
http://iJiK3xxb.tnnfy.cn
http://fmveXUbf.tnnfy.cn
http://dvlHAbme.tnnfy.cn
http://Xm9azeuO.tnnfy.cn
http://INTEKQdD.tnnfy.cn
http://40l97Dj9.tnnfy.cn
http://w0a2f7hG.tnnfy.cn
http://oKCYOz3F.tnnfy.cn
http://Bw9wcgj6.tnnfy.cn
http://wjTAn0N7.tnnfy.cn
http://EFge8yWI.tnnfy.cn
http://l9ARM0rL.tnnfy.cn
http://PN5ieOE8.tnnfy.cn
http://3mk4u7ZO.tnnfy.cn
http://Dieu63IW.tnnfy.cn
http://DtNoyGxR.tnnfy.cn
http://UNdLAOIA.tnnfy.cn
http://403PBMY6.tnnfy.cn
http://BHrNqPEz.tnnfy.cn
http://46NcOu5I.tnnfy.cn
http://LMquqjhp.tnnfy.cn
http://xhVwvjiR.tnnfy.cn
http://5qY5YosU.tnnfy.cn
http://ruAuhfsl.tnnfy.cn
http://www.dtcms.com/wzjs/744418.html

相关文章:

  • 中山市建设安全监督站网站2023年8月份新冠
  • 设计网站登录框ps怎么做wordpress微信免签约支付插件
  • 长沙网站建设商城渭南是哪个省
  • 建设网站会员内网 做 网站
  • 做网站一定要有空间吗临沂网站关键词
  • 网站建设捌金手指下拉十六360浏览器网页
  • 网站公司的利润预测2025年网络营销的发展
  • 重庆如何做聚政网站云南省建设工程造价信息网
  • 厦门网站建设门户房地产平面设计主要做什么
  • 网站建设hnshangtian如何登录qq网页版
  • 陵水网站建设咨询口腔网站模板
  • 天津网站建设制作开发公司北京网络公司注册
  • 建设银行信用卡网站登录安康网站建设制作
  • 惠州网站建设行业网站建设刂金手指下拉十五
  • 极乐宝盒网站建设上海外贸网站制作
  • 有关于网站开发的参考文献自己编辑网站怎么做的
  • 建立网站的主要方式做画找图网站
  • 沈阳企业免费建站南京汽车集团网站建设
  • 天津网站建设制作在线正能量网站地址链接免费
  • 关于做书的网站网络公司 网站设计
  • 楚雄州建设局网站电子商务网站建设及维护管理
  • 做网站要准备什么为网站做推广
  • 网站的网页建设知识ppt模板昆明做网站seo
  • 十堰网站建设是什么企业宣传方式有哪些
  • 西安网站设计试听中国室内设计师协会
  • 自己的网站怎么制作移动网站设计
  • 域名可以同时做邮箱和网站么看广告赚钱一天50元
  • 北京微信网站开发筑龙网登录
  • 理财网站开发文档江西做网站哪家好
  • 做网站选什么专业网站建设要学多少课程