📜  K个连续删除后的最大总和(1)

📅  最后修改于: 2023-12-03 14:43:43.385000             🧑  作者: Mango

K个连续删除后的最大总和

简介

给定一个整数数组nums和一个整数K,你需要删除最多K个数字,使得剩余元素的和最大。

算法

一种简单的解决方案是使用动态规划。定义一个二维数组dp,其中dp[i][j]表示删除了j个数字后,前i个数字的最大总和。

则状态转移方程为:

dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]+nums[i])

其中,dp[i-1][j-1]+nums[i]表示删除i这个数字,并在之前删除j-1个数字的最大总和。

最终结果为dp[n][K],其中n为数组长度。

时间复杂度为O(nK),空间复杂度为O(nK)。

代码实现
def deleteAndEarn(nums, k):
    n = len(nums)
    dp = [[0 for _ in range(k+1)] for _ in range(n+1)]
    for i in range(1, n+1):
        for j in range(1, k+1):
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]+nums[i-1])
    return dp[n][k]
示例

nums = [1,2,3,4,5], k = 2

删除3和5,剩下的数字为[1,2,4],最大总和为7。

nums = [2,2,3,3,3,4], k = 3

删除2个3和一个2,剩下的数字为[3,3,4],最大总和为10。