输入一个长度为 n的整数序列,从中找出一段长度不超过 m的连续子序列,使得子序列中所有数的和最大。
注意: 子序列的长度至少是 1
输入格式
第一行输入两个整数 n,m
第二行输入 n个数,代表长度为 n 的整数序列。同一行数之间用空格隔开。
输出格式
输出一个整数,代表该序列的最大子序和。
数据范围
1≤n,m≤300000
输入样例:
- 6 4
- 1 -3 5 1 -2 3
输出样例:
7
求连续子序列的和的最大值,可以枚举其左、右端点,
状态表示:f[i]
集合:以第i个元素为右端点的连续子序列的和
属性:max
状态计算:
res=min(res,f[i]-min{s[j})
i-m+1<=j<=i
由状态计算可以看出:
可以用一个单调队列来优化(具体见题目:滑动窗口)
- #include
- #include
- #include
-
- using namespace std;
-
- const int N=300010;
-
- int q[N];
- int s[N];int main()
- {
- int n,m;
- cin>>n>>m;
- for(int i=1;i<=n;i++)
- {
- int x;
- scanf("%d",&x);
- s[i]=s[i-1]+x;
- }
- int res=-0x3f3f3f3f;
- //滑动窗口
- int hh=0,tt=-1;
- q[++tt]=0;
- for(int i=1;i<=n;i++)
- {
- while(hh<=tt&&q[hh]
-
- res=max(res,s[i]-s[q[hh]]);
-
- while(hh<=tt&&s[q[tt]]>=s[i]) tt--;
-
- q[++tt]=i;
- }
-
- cout<
- return 0;
- }
-
相关阅读:
【Python爬虫+数据分析】采集电商平台数据信息采集|电商API数据采集接口接入
【OpenCV-Python】教程:4-1 理解特征
JMeter进行并发测试&参数化
金仓数据库KingbaseES客户端编程接口指南-JDBC(8. JDBC 元数据处理)
前端点击地图上的位置获取当前经纬度
运维排查-使用hcache插件排查Buffer/cache占用过高
Java - equals 与 == 的区别
C++11:右值引用
2023互联网中秋礼盒大比拼!
【web-避开客户端控件】(2.1.1)客户端传输数据:隐藏表单字段、HTTP cookie、URL参数
-
原文地址:https://blog.csdn.net/weixin_62224014/article/details/127623733