题目要求我们在最多修改一个元素的条件下,计算数组的最大子段和。修改操作是将某一块田地的收益值变为给定的 v,也可以不修改。
问题可以分解为两种情况的较大值:
i:将 a[i] 变为 v,此时包含该位置的最大子段和可以分为三部分:左侧以 i-1 结尾的最大子段和(如果为正就加上,否则不加)、修改后的值 v、右侧以 i+1 开头的最大子段和(如果为正就加上,否则不加)。即:candidate[i] = max(0, left_max[i-1]) + v + max(0, right_max[i+1])农夫约翰拥有 n 块连续相邻的田地,编号为 1 到 n。每块田地有一个预期收益值 ai,若为负数则表示亏损。约翰有一次技术改造的机会:他可以选择至多一块田地,将其收益值调整为 v(也可以不进行任何调整)。然后,他计划承包一个连续的田地区段,旨在获得最大的总收益和。所求即为:在允许至多一键调整的决策下,所有可能的连续区段的总收益和的最大值。
形式上:给定一个长度为 n 的整数序列 a1,a2,…,an 和一个整数 v,你可以将序列中至多一个元素替换为 v。设最终序列为 b1,…,bn,求 max1≤l≤r≤n∑i=lrbi 的最大可能值。
数据范围:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册