动态规划入门 TYVJ 1305 最大子段和(环状)
来源:互联网 发布:linux shell 打印变量 编辑:程序博客网 时间:2024/06/06 02:52
P1305 最大子序和
时间: 1000ms / 空间: 131072KiB / Java类名: Main
描述
输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大。
例如 1,-3,5,1,-2,3
当m=4时,S=5+1-2+3=7
当m=2或m=3时,S=5+1=6
例如 1,-3,5,1,-2,3
当m=4时,S=5+1-2+3=7
当m=2或m=3时,S=5+1=6
输入格式
第一行两个数n,m
第二行有n个数,要求在n个数找到最大子序和
第二行有n个数,要求在n个数找到最大子序和
输出格式
一个数,数出他们的最大子序和
测试样例1
输入
6 4
1 -3 5 1 -2 3
输出
7
备注
数据范围:
100%满足n,m<=300000
100%满足n,m<=300000
没听懂神犇讲的什么窗口滑动,只好自己瞎造一个单调队列了......
贴代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 int n,m; 8 int head,tail; 9 int in; 10 int sum,ans;11 int num[300010],pos[300010];12 13 int main(){14 scanf("%d%d",&n,&m);15 head=1;16 tail=2;17 for(int i=1;i<=n;i++){18 scanf("%d",&in);19 sum+=in;20 while(num[tail-1]>=sum&&tail>head) tail--;21 num[tail]=sum;22 pos[tail]=i;23 tail++;24 while(i-pos[head]>m) head++;25 ans=max(ans,sum-num[head]);26 }27 printf("%d\n",ans);28 return 0;29 }
阅读全文
0 0
- 动态规划入门 TYVJ 1305 最大子段和(环状)
- 动态规划入门 P1115 最大子段和(链状)
- 动态规划 P1121 环状最大两段子段和
- 最大子段和(动态规划)
- 动态规划入门之最大M子段和
- 动态规划入门-最大子段
- 动态规划----最大子段和
- 最大子段和(动态规划)
- 最大子段和动态规划实现
- 【动态规划】最大m子段和
- 动态规划 - 最大子段和
- 最大子段和-分治&&动态规划
- 动态规划求解最大子段和
- 动态规划之最大子段和
- 动态规划求最大子段和
- 动态规划之最大子段和
- 动态规划,最大子段和
- 动态规划 最大子段和问题
- 树状数组 HNOI2002 营业额统计
- 树状数组 NOIP2013 火柴排队
- 最小生成树 HZOI 2016公路修建
- 动态规划入门 COGS1398 最长上升子序列
- 动态规划入门 P1115 最大子段和(链状)
- 动态规划入门 TYVJ 1305 最大子段和(环状)
- KMP kmp模板
- 关于spring的事务面试题
- 状压DP HDU3538 A sample Hamilton path
- 树形DP Tyvj1052 没有上司的舞会
- 动态规划入门 洛谷P1020 拦截导弹
- 状压DP SCOI2005 互不侵犯King
- 动态规划入门 合并石子 COGS1660 石子合并
- 区间DP code[vs]1258 关路灯