python动态规划求解不相邻最大子序列和

该博客讨论了一种动态规划的解决方案,用于在给定数组中找到一个子序列,使得子序列中的任意两个元素没有相邻的下标,并且子序列的最大和最大。这个问题与经典的打家劫舍问题相似。博主提供了Python代码实现,通过维护一个动态规划数组来确定最佳子序列的和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

字节教育中台DATA-EDU 后端开发一面算法:

**
原题来自牛客网:
https://www.nowcoder.com/practice/269b4dbd74e540aabd3aa9438208ed8d?tpId=188&tqId=38344&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high-week%2Fquestion-ranking&tab=answerKey
牛客原题网址

描述

给你一个数组,其长度为 n ,在其中选出一个子序列,子序列中任意两个数不能有相邻的下标(子序列可以为空)
本题中子序列指在数组中任意挑选若干个数组成的数组。
在这里插入图片描述
**

题解:

**
可以参考leetcode打家劫舍问题https://leetcode-cn.com/problems/house-robber/
打家劫舍leetcode原题
具体思路就是:
在这里插入图片描述
我的代码:

class Solution:
    def subsequence(self , n: int, array: List[int]) -> int:
        # write code here
        if len(array) == 0:
            return
        n = len(array)
        dp = [0]*(n+1)
        dp[0] = 0
        dp[1] = max(array[0],dp[0])
        for k in range(2, n+1):
            dp[k] = max(dp[k-1], array[k-1]+dp[k-2])
        return dp[n]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值