博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
阅读量:5879 次
发布时间:2019-06-19

本文共 899 字,大约阅读时间需要 2 分钟。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415

题意:给出一个环形数列,求出一个长度不大于K的连续子列使得子列的和最大?

思路:维护一个单调队列,使得队头元素位置作为数列的开始位置总是最优的。那么如何保持这一特性呢?那么对于当前的i,可能是当前或者以后的最优区间头,所以需要插入。而q[tail-1]是队列最后一个元素,如果区间[q[tail-1], i-1]的和小于0,要让q[tail-1]作为区间头的话,必然不是最优,因此踢出队列;反之队尾作为开始比i更优。

int n,m,a[N],f[N];int Q[N],head,tail;int main(){    int C;    RD(C);    while(C--)    {        RD(n,m);        int i;        FOR1(i,n) RD(a[i]);        FOR1(i,m-1) a[i+n]=a[i];        FOR1(i,n+m-1) f[i]=f[i-1]+a[i];        int sum=-INF,L,R,temp;        head=tail=0;        FOR1(i,n+m-1)        {            while(head
<0) { tail--; } Q[tail++]=i; while(head
m) head++; temp=f[i]-f[Q[head]-1]; if(temp>sum) sum=temp,L=Q[head],R=i; } if(L>n) L-=n; if(R>n) R-=n; PR(sum,L,R); } return 0;}

  

转载地址:http://jedix.baihongyu.com/

你可能感兴趣的文章
JAVA入门到精通-第42讲-坦克大战9
查看>>
【转载】Python 代码调试技巧
查看>>
Winform和WPF也使用Sql Server CE4.0和EF的简单方法
查看>>
通过idea 打包 spring maven项目打包为可执行jar包
查看>>
python-xlrd api
查看>>
js高级程序设计学习之高级函数
查看>>
Nginx + Tomcat + Session
查看>>
oracle分配权限 学习笔记--转载
查看>>
Flex builder 3 调试
查看>>
带头尾和动画的下拉刷新RecyclerView
查看>>
Android Annotations浅析
查看>>
赵雅智_ListView_SimpleAdapter
查看>>
Android开发系列(十六):【Android小游戏成语连连看】第二篇
查看>>
第六周作业
查看>>
利用循环打印图形
查看>>
Windows QT 商业版 试用
查看>>
Jquery 获取table中的td元素的值
查看>>
System V IPC
查看>>
你是想读书,还是想读完书?
查看>>
php 常量-魔术常量
查看>>