HDU3415】的更多相关文章

//hdu3415 Max Sum of Max-K-sub-sequence //单调队列 //首先想到了预处理出前缀和利用s[i] - s[j]表示(j,i]段的和 //之后的问题就转换成了求一个最小的s[j]了,这样就能够单调队列 //求最小值. //队列中维护的是区间的開始的位置j.我们插入队列中的是j-1,由于 //这个时候s[i] - s[j-1]刚好就是[j,i]段闭区间的和 //这里用两种方式实现,一种是stl,一种是手动模拟,两者的速度,測试的 //结果在杭电測试都是一样的,4…
poj2823 题目链接 长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值 如果用单调队列做,求最小值时,队列应该严格递增的.所以插入时,队尾大于等于插入值的元素都应被舍弃,因为插入元素不仅小而且新,没有必要保留队尾这些又大又旧的元素. /*选C++交是5k多毫秒,但是G++就会超时.*/#include <cstdio> #include <cstring> ; int data[N]; int o1[N],o2[N]; int q[N]; int n,k;…
Max Sum of Max-K-sub-sequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3415 Appoint description:  System Crawler  (2016-07-10) Description Given a circle sequence A[1],A[2],A[3]......A[n]…
题目大意: 给出一个有N个数字(-1000..1000,N<=10^5)的环状序列,找出一个长度不大于k的连续子序列,使其和最大. 分析: 我们可以将环状序列从某处切开,变成一行,然后复制前n-1个数字到后面,得到一个2*n-1的序列.问题即转换为在该2*n-1的序列中求长度不超过k的最大连续字段和. 预处理出前缀和,记为s.j到i的子段和即为s[i]-s[j-1].现在只需要对每一个元素i,找出区间[i-k+1,i]中s的最小值即可.这就是一个简单的单调队列问题了. 维护一个记录s的最小值的单…
题目大意:给定长度为n的数组,求出最大的区间和,其中区间长度在[1,k]之间 分析: 学动态规划的时候我们会遇到一个经典问题 最大子段和,这个题跟最大子段和很类似 不同的是区间的长度有限制,无法用原算法解决 转换思路 区间[i,j]的和就是ans=sum(j)-sum(i-1) ( j - i <=k) 那么对于每个j 我们肯定希望sum(i-1)最小,所以我们只需要对sum(i-1)维护一个单调队列,然后依次增加 j 同时将单调队列中不满足( j - i <k)的元素出队即可 代码: #in…
Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left neighbour of A[1] is A[n] , and the right neighbour of A[n] is A[1]. Now your job is to calculate the max sum of a Max-K-sub-sequence. Max-K-sub-sequ…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415 题意:一个长度为n包含正负整数的数环,即第1个的左边是第n个.从中选一个不超过k的序列,使得序列和最大,最大值相同选开始点最小的,开始点相同选长度最小的. 分析:单调队列维护在k个数之内的最小值的下标,然后一直扫一遍就行了,只要懂单调队列这题就是水题了. #include <cstdio> #include <cstring> #include <cmath> #in…
   Max Sum of Max-K-sub-sequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit   Status Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left neighbour of A[1] is A[n] , and…
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5569    Accepted Submission(s): 2003 Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle se…
比较裸的单调队列 先求前缀和,枚举所有结束位置1~n+k即可 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 200005 using namespace std; int ans,a[maxn],sum[maxn]; int main(){ int T,N,K; scanf("%d",&T); while…