LeetCode689 三个无重叠子数组的最大和
表示前个元素,选个子区间的最优值
对于当前,转移方程考虑是否以第个元素为子区间的最后一个元素
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
分类:
ACM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统