1 条题解
-
0
B. 最大和 详细题解
题目核心理解
给定一个长度为 的数组 ,需要执行恰好 次操作。 每次操作可以选择任意连续子数组(可以为空),求出它的和并插入数组任意位置。
求 次操作后,数组能达到的最大可能和,结果对 取模。
核心思路
1. 关键符号与性质
设:
- :原数组所有元素的和
- :数组的最大子段和(空子数组的和为 ,若所有子段和为负则取 )
最优策略:
- 每次操作都选择当前最大子段和并插入数组。
- 每次插入后,新的最大子段和会变为原来的 倍。
2. 增量规律
- 第 次插入:新增
- 第 次插入:新增
- 第 次插入:新增
- ……
- 第 次插入:新增
总增量是等比数列求和:
算法流程
- 计算原数组的总和 。
- 使用贪心算法(Kadane)求出数组的最大子段和 ,并与 取最大值。
- 用快速幂计算 。
- 代入公式计算最终答案。
- 将结果对 取模并输出(保证非负)。
公式与复杂度分析
最终答案公式:
复杂度
- 求数组和与最大子段和:
- 快速幂计算 :
- 总时间复杂度:
可轻松处理 、多组数据总和限制。
- 1
信息
- ID
- 6567
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者