LeetCode689 三个无重叠子数组的最大和

LeetCode689 三个无重叠子数组的最大和

dp[i][j]表示前j个元素,选i个子区间的最优值

对于当前j,转移方程考虑是否以第j个元素为子区间的最后一个元素

dp[i][j]=max(dp[i][j1],dp[i1][jk]+pre[j]pre[jk])

class Solution:
    def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:

        n, pre = len(nums), [0]
        for i in range(n): pre.append(pre[-1] + nums[i])
        dp = [[0 for i in range(n + 1)] for j in range(3 + 1)]

        for i in range(1, 3 + 1):
            for j in range(k, n + 1):
                dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - k] + pre[j] - pre[j - k])
        
        # for i in range(3 + 1): print(dp[i])
        ans, j, i = [], 3, n
        while i > 0:
            if j == 0: break
            if dp[j][i] > dp[j][i - 1]:
                ans.append(i - k)
                j = j - 1
                i = i - k
            else:
                i = i - 1

        ans.reverse()
        return ans

posted on   solvit  阅读(22)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示