[pythontip]最大非连续子序列

本文详细介绍了如何使用动态规划算法解决给定整数列表的最大非连续子序列和问题,并通过实例展示了具体实现过程。通过定义状态转移方程,逐步构建最优解,最终输出最大子序列和。
题目链接:http://www.pythontip.com/coding/code_oj_case/36
给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。 这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。 例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50]).


dp首先复制L序列的元素,然后比较前两个元素,确定最优解赋值给dp[1]。
1 # L=[2,-3,3,50]
2 dp = list(L)
3 dp[1] = max(dp[1], dp[0])
4 for i in range(2, len(L)):
5     dp[i] = max(max(dp[i], dp[i-1]), dp[i-2]+L[i])
6 print(dp[len(L)-1])

转载于:https://www.cnblogs.com/kirai/p/4850557.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值