随笔:买卖股票笔记

买卖股票的最佳时机

题型一:给一个价格数组,求买卖一次可以取得的最大值

设dp数组dp[i][0]为第i天持有股票的收益,相反的设dp[i][1]为第i天已经抛售掉股票的收益

显然可得递推公式:

dp[i][0]=dp[i-1][0]或-price[i]中的最大值;

dp[i][1]=dp[i-1]+price[i]或dp[i-1][1];

由图可见,第i层相当于给第i+1层打表,dp[i][0]相当于利用前面的状态迭代为下一层求得上一层买入时的最小花费,而dp[i][1]则是记忆每一天根据前几天的状态求得的最大收益与当天价格加上之前买入收益之和比较后得到的较大值罢了,最终输出dp[price.size()][1]即可

题型二:给定一个价格数组,你可以多次买卖股票

依旧设dp数组dp[i][0]为第i天持有股票的收益,相反的设dp[i][1]为第i天已经抛售掉股票的收益

显然可得递推公式:

递推公式:

dp[i][0]=dp[i-1][0]或dp[i-1][1]-price[i](因为不能连续的只买不卖,所以必须的是前天卖出后才能再次买入)的最大值//此处是想让下一次买入股票前的开销最少,例如-10,-5,肯定是让想方设法的让开销接近更大的-5,减少花费

dp[i][1]=dp[i-1][1]或dp[i-1][0]+price[i]中的最大值;

在本次之前买入并在这次卖出求得的利润与之前就卖出的利润求最大值,便是获得的最大利润

总结:由题意,显然每次只能买或卖,即dp[i][0]与dp[i][1]二者并不能同时满足,则是dp[i][0]为下一个阶段的dp[i+1][1]服务,而dp[i][1]由dp[i-1][0]服务,即dp[i][1]才是每次真正要求的值,前面的只不过是为了后面打表迭代罢了;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值