动态规划:计算给定列表的子序列的最大值?

这里我们假定给出整数列表(基金的价格),问从哪一天买入、哪一天卖出的产生收益最大??即连续子序列的最大值

[-1, 5, -2, 9, -5, 8, -12, 3, 4, -6] # 共10天的股票价格

第1天:收益 -1。

第2天:第2天的收益 5,前1天的最大收益+第2天的收益=4,则第2天买入并卖出收益最大为 5>4。

第3天:第3天的收益 -2,前2天的最大收益+第3天的收益=3,则第2天买入第3天卖出收益最大为 3>-2。

第4天:第4天的收益 9,前3天的最大收益+第4天的收益=12,则第2天买入第4天卖出收益最大为 12>9。

第5天:第5天的收益 -5,前4天的最大收益+第5天的收益=7,则第2天买入第5天卖出收益最大为 7>-5。

第6天:第6天的收益 8,前5天的最大收益+第6天的收益=15,则第2天买入第6天卖出收益最大为 15>8。

第7天:第7天的收益 -12,前6天的最大收益+第7天的收益=3,则第2天买入第7天卖出收益最大为 3>-12。但是不如第6天卖出的效益高。

第8天:第8天的收益 3,前7天的最大收益+第8天的收益=6,则第2天买入第8天卖出收益最大为 6>3。但是不如第6天卖出的效益高。

设:第i天的最大收益dp[i] = max(前i-1天的最大收益dp[i-1] + 第i天的收益nums[i], 第i天的收益nums[i])

nums = [-1, 5, -2, 9, -5, 8, -12, 3, 4, -6]

for i in range(1, len(nums)):
    nums[i] = max(nums[i], nums[i]+nums[i-1])

print('每天卖出的收益:', nums)
print('最大收益:', max(nums))

每天卖出的收益: [-1, 5, 3, 12, 7, 15, 3, 6, 10, 4]
最大收益: 15

即第2天买入,第6天卖出产生的效益最大:5-2+9-5+8=15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值