信息
- ID
- 1530
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
因为所有元素均为正数,对一个固定区间求 f 时,最优策略一定是从左向右让当前段尽量长。
对每个位置 i,令 pi 为最小的、使 Ai+Ai+1+⋯+Api>S 的位置;若不存在则令 pi=N+1。再令 dpi=∑r=iNf(A[i,r])。当 r<pi 时整个区间只需一段;当 r≥pi 时,第一段必为 [i,pi−1],余下部分等价于从 pi 开始。因此有 dpi=dppi+N+1−i。
从右向左计算 dp 即可。由于元素为正,随着左端点右移,满足区间和不超过 S 的最大右端点也只会右移,所以用双指针在线性时间内求出全部 pi。
最后累加所有 dpi,时间复杂度为 O(N),空间复杂度为 O(N)。