您的位置:首页 > 其它

SSL 2521 2014年汕头市选拔赛普级组 数数

2016-12-21 16:40 183 查看

题目

给出一个长度为n(1<=n<=100000)的整数序列,选择长度不超过k(1<=k<=n)的段,使得总和最大。

思路

(在资料中的思路3)将问题转换成在 sum[r-k..r-1] 中找一个最小值。首先进行预处理,用 sum[i] 表示前i个数的和,枚举右端点r。这样可以那么一个元素单调递增的队列,在每次处理完后把队尾所有不小于 sum[r] 的删掉,把 sum[r] 移入队尾。之后每次只把队头的元素在原数组中的下标小于 r-k 的元素删掉。取队头即可得到以 r 为右端点的最大总和。

程序

https://paste.pound-python.org/show/YTpomW707LCKlXOVUjmN/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: