HDU 3415 Max Sum of Max-K-sub-sequence 单调队列题解
来源:互联网 发布:手机ping软件 编辑:程序博客网 时间:2024/06/05 10:04
本题又是一题单调队列题解。
技巧就是需要计算好前n项和Sn = a1 + a2 + ... an
这样方便处理。
记录一条单调队列,其意义是: q(head), q(head+1), ...q(tail)
其中头q(head)代表当前最佳解的起点
这样我们只需要在求某点为结尾的S[i] - S[q(head)就得到当前最佳值。
了解了单调数列,知道其中的记录意义,那么这道题就没有难度了。我也是了解这些信息之后就自己敲出代码的。
不过有些细节没写好也让我WA了几次。
最近少刷水题,而一直都是每天一个新的算法,也学了不少算法了。
#include <stdio.h>#include <limits.h>const int MAX_N = 100001;int N, K;int arr[MAX_N];int S[MAX_N<<1];int qu[MAX_N<<1];int val, sta, end;void getMaxK(){int tail = 0, head = 0;qu[0] = 0;//记录S数组的下标int len = N+K;val = INT_MIN;for (int i = 1; i < len; i++){while (tail >= head && S[i-1] <= S[qu[tail]]) tail--;while (tail >= head && qu[head] < i - K) head++;//不能漏了tail>=headqu[++tail] = i-1;//这句可以放前一句前面,那么就可以不用tail>=head判断了int sum = S[i] - S[qu[head]];if (sum > val || sum == val && qu[head]+1==sta && i-qu[head]<end-sta+1){val = sum;sta = qu[head]+1;end = i;}}}int main(){int T;scanf("%d", &T);S[0] = 0;while (T--){scanf("%d %d", &N, &K);for (int i = 1; i <= N; i++){scanf("%d", &arr[i]);S[i] = arr[i] + S[i-1];}for (int i = 1; i < K; i++){S[i+N] = arr[i] + S[i+N-1];}getMaxK();if (end > N) end = end % N;printf("%d %d %d\n", val, sta, end);}return 0;}
1 0
- HDU 3415 Max Sum of Max-K-sub-sequence 单调队列题解
- HDU Max Sum of Max-K-sub-sequence(单调队列)
- hdu 3415 Max Sum of Max-K-sub-sequence题解
- hdu 3415 Max Sum of Max-K-sub-sequence【单调队列】
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
- hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)
- HDU 3415 Max Sum of Max-K-sub-sequence[单调队列优化dp]
- 【单调队列】hdu 3415 Max Sum of Max-K-sub-sequence
- hdu 3415 Max Sum of Max-K-sub-sequence 单调队列dp
- HDU 3415(Max Sum of Max-K-sub-sequence-单调队列优化DP)
- hdu 3415 Max Sum of Max-K-sub-sequence (单调队列)
- HDU--杭电--3415--Max Sum of Max-K-sub-sequence--暴力或单调队列
- HDU 3415 Max Sum of Max-K-sub-sequence【单调队列】
- HDU--3415--Max Sum of Max-K-sub-sequence--单调队列
- hdu 3415 Max Sum of Max-K-sub-sequence (单调队列)
- 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence
- 单调队列——HDU 3415 Max Sum of Max-K-sub-sequence
- android隐藏底部虚拟键Navigation Bar实现全屏
- 基于用户和基于物品的协同过滤算法的比较
- RDLC 图形报表预览时 “本地报表处理期间错误”
- 主成分分析
- 豆瓣客户端的实现09 源码分析
- HDU 3415 Max Sum of Max-K-sub-sequence 单调队列题解
- 最小哈希
- CoreMotion
- 关于使用apktool可以反编译无法回编译的解决问题
- 第二天接触OC的“类”、“对象”、“方法”
- [iOS]XML两种解析方法
- [Android 4.4.2] Oppo Find7 轻装版 MIUI 4.7.4 by crazyi
- uva 375 Inscribed Circles and Isosceles Triangles(等腰三角形内接圆)
- android SD卡自动升级流程