HDU 3415 Max Sum of Max-K-sub-sequence 最长K子段和
2015-07-03 13:07
573 查看
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415
意甲冠军:环。要找出当中9长度小于等于K的和最大的子段。
思路:不能採用最暴力的枚举。题目的数据量是10^5,O(N^2)的枚举回去超时。本题採用的非常巧妙的DP做法,是用单调队列优化的DP。
运用的是STL的deque,从i:1~a找到以当中以i为尾的符合条件的子段。并将i本身放入双向队列。全部i从队列后放入,保证了队列的单调性。
代码:
意甲冠军:环。要找出当中9长度小于等于K的和最大的子段。
思路:不能採用最暴力的枚举。题目的数据量是10^5,O(N^2)的枚举回去超时。本题採用的非常巧妙的DP做法,是用单调队列优化的DP。
运用的是STL的deque,从i:1~a找到以当中以i为尾的符合条件的子段。并将i本身放入双向队列。全部i从队列后放入,保证了队列的单调性。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cctype> #include <cstdlib> #include <cmath> #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <ctype.h> #include <algorithm> #include <string> #define PI acos(-1.0) #define mem(a,b) memset(a,b,sizeof(a)) #define maxn 100005*2 #define maxm #define INF 0x7fffffff typedef long long ll; using namespace std; int num[maxn],sum[maxn]; int main() { int tot; scanf("%d",&tot); while(tot--) { int a,b; scanf("%d%d",&a,&b); scanf("%d",&num[1]); sum[1]=num[1]; for(int i=2;i<=a;i++) { scanf("%d",&num[i]); sum[i]=sum[i-1]+num[i]; } for(int i=a+1;i<a+b;i++) sum[i]=sum[i-1]+num[i-a]; deque < int > dd; int ans=-INF,head=-1,tail=-1; for(int i=1;i<a+b;i++) { while(!dd.empty()&&sum[i-1]<sum[dd.back()]) dd.pop_back(); while(!dd.empty()&&i>dd.front()+b) dd.pop_front(); dd.push_back(i-1); if(sum[i]-sum[dd.front()]>ans) { ans=sum[i]-sum[dd.front()]; head=dd.front()+1; tail=i; } } if(head>a) head-=a; if(tail>a) tail-=a; printf("%d %d %d\n",ans,head,tail); } return 0; }
相关文章推荐
- UI_拖动View
- 以 DirectUI 方式实现的ImageButton
- androidstuido使用问题总结一
- UI_触摸事件
- 纯UILabel实现文字的竖排显示
- 继承UILabel类实现Label竖直对齐
- hdu 1908 double queues
- Absolute paths & require()
- 获取运行中的TeamViewer的账号和密码(Test on English GUI)
- hibernate : No positional parameters in query 错误解决办法
- IOS开发学习笔记——UITabBarController
- [tarjan] hdu 3836 Equivalent Sets
- Android 建造者(Builder)模式
- 如何使用NSOperations和NSOperationQueues(二)
- 设计模式读书笔记:Builder(建造者)
- UEFI是什么?与BIOS的区别在哪里?UEFI详解!
- iOS UINavgationController、 UINavigationBar、 UINavigationItem关系分析
- 自已实现一个UI库-实现Windows的一个模拟器
- 自已实现一个UI库-实现画图API接口
- emulator: ERROR: x86 emulation currently requires hardware acceleration!Please ensure Intel HAXM is