首页 > 其他分享 >最大子序和——单调队列+DP

最大子序和——单调队列+DP

时间:2023-02-27 16:03:08浏览次数:44  
标签:GCC 队列 ll back ans 序列 子序 DP

输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。

注意: 子序列的长度至少是 1。

输入格式
第一行输入两个整数 n,m。

第二行输入 n 个数,代表长度为 n 的整数序列。

同一行数之间用空格隔开。

输出格式
输出一个整数,代表该序列的最大子序和。

数据范围
1≤n,m≤300000
输入样例:
6 4
1 -3 5 1 -2 3
输出样例:
7

用单调队列优化,如果下标差距超过m,队首出队,利用前缀和去求一个区间的总和,队首即为当前下标范围的最小值,所以如果s[i]要<队尾队尾就要出队(while循环),每次用s[i]-队首的值(暴力枚举,s[i]每个都会被遍历,但是队首的那个是区间中最小的),即目前的最优值

点击查看代码
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll a[300010], s[300010];
deque<ll>q;
int main()
{
    ios::sync_with_stdio(false);
    int n, i, j, m;
    cin >> n >> m;
    ll ans = INT_MIN;
    for (i = 1; i <= n; i++)
    {
        cin >> a[i];
        s[i] = s[i - 1] + a[i];
    }
    q.push_back(0);//初始化,s[i]-s[0]就是前i个的和
    for (i = 1; i <= n; i++)
    {
        while (!q.empty() && i - q.front() > m)q.pop_front();
        //队列中的数下标的差距不能大于m
        ans = max(ans, s[i] - s[q.front()]);//更新ans,队首即当前下标范围中的最小值可以作为a[j]
        while (!q.empty() && s[q.back()] >= s[i])q.pop_back();
        //如果队尾的数比s[i]大那么队尾的数就不可能作为s[i]-s[j]中的s[j]
        q.push_back(i);
    }
    cout << ans;
    return 0;
}

标签:GCC,队列,ll,back,ans,序列,子序,DP
From: https://www.cnblogs.com/myy-zzb/p/17159993.html

相关文章

  • TJA1050国产替代DP1050T高速 CAN 总线收发器
    DP1050T是一款应用于CAN协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,速率可达到1Mbps,具有在总线与CAN协议控制器之间进行差分信......
  • 算法刷题 Day 57 | ● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇
    详细布置647.回文子串动态规划解决的经典题目,如果没接触过的话,别硬想直接看题解。https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.htm......
  • 给wordpress编辑插件fckeditor添加中文字体(原创)
    用​​wordpress​​​建站这些天来觉得自带的编辑器总是那么的力不从心,如是就像这换一个编辑器,google了一下,欢乐fckeditor插件,感觉还算顺手,可是用了几天发现这个字体设置不......
  • 菊子曰备份Wordpress网站的博客内容出错的解决办法(原创)
    今天用菊子曰备份Wordpress网站的博客内容出错,我采用的wordpress是最新的3.2.1版本,出现如下的错误信息:1、 Accessviolationataddress1471C180inmodule'CSBlogServic......
  • 关于MQ消息队列的一些浅理解
    从别的博客看到的,说的明白一点就是生产者是商家,消息队列是驿站,消费者是用户商家(生产者)生产是,发货存到驿站(消息推到消息队列),用户(消费者)消费是,从驿站拿货(从消息队列拿消息)......
  • IP TCP UDP数据报头的相关记录
    IPTCPUDP数据报头的相关记录IP数据报头typedefstruct_IP_HEADER_V4_{ union { UINT8versionAndHeaderLength; struct { UINT8headerLength:4; U......
  • 02_11_Java语音进阶||day11_网络编程【TCP|UDP】
    第一章网络编程入门1.1软件结构两种架构各有优势,但是无论哪种架构,都离不开网络的支持。“网络编程”,就是在一定的协议下,实现两台计算机的通信的程序1.2网络编程三要素_网......
  • OpenEuler安装xfce桌面 及 远程桌面软件xrdp
    1.xfce桌面安装,参考官网文档:InstallXfce(openeuler.org)安装后心得:dnf库里的软件版本都比较低,安装上这个xfce后,发现默认没有浏览器,用dnf安装的Firefox只有74版......
  • 栈和队列
    栈和队列栈和队列是STL中的两个数据结构,其底层实现可以是多种容器(vector,deque,list都可以),但其本身不被归类为容器,而被归类为容器适配器containeradapter栈特点:先进后......
  • LeetCode72. 编辑距离(/dp)
    原题解题目约束题解classSolution{public:intminDistance(stringword1,stringword2){intn=word1.length();intm=word2.le......