切蛋糕

题目描述

今天是小Z的生日,同学们为他带来了一块蛋糕。这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。

小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。

吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。

输入格式

输入文件cake.in的第一行是两个整数N,M。分别代表共有N小块蛋糕,小Z最多只能吃M小块。

第二行用空格隔开的N个整数,第i个整数Pi代表第i小块蛋糕的幸运值。

输出格式

输出文件cake.out只有一行,一个整数,为小Z能够得到的最大幸运值。

输入 #1

5 2
1 2 3 4 5

输出 #1

9

输入 #2

6 3
1 -2 3 -4 5 -6

输出 #2

5

一道单调队列的题目,但是很难想到;我们首先要想到前缀和,当只能吃M块时,这就是一道前缀和的裸题,但是M是不固定的,所以我们要想到对于 i 结尾的一个子区间,最大的区间和为s[i]=max(s[i]-s[j]),这时只要求出s[j]的最小值,j属于【i-M,i-1】;那这里就能看出是一道单调队列的题了,维护一个单调递增的队列;
代码:

#include<bits/stdc++.h>
using namespace std;
int sum[500100];
int a[500100];
struct Node{int post,date;
}sta[500100];
int main(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum[i]=sum[i-1]+a[i];//前缀和}int ans=0;int head=0;int M=-1e9;//可能有负数,设为负值 for(int i=1;i<=n;i++){while(head<=ans&&sta[ans].date>=sum[i]){ans--;//出队 }sta[++ans].date=sum[i];//入队 sta[ans].post=i;while(head<=ans){if(sta[head].post>=i-m&&sta[head].post<=i){M=max(M,sum[i]-sta[head].date);break;}else{head++;}}}printf("%d\n",M);return 0;
}

切蛋糕(洛谷P1714)相关推荐

  1. 【Leetcode单调队列】- 洛谷P1714切蛋糕

    单调队列 解决该类问题的重点维护一个队列,从队首到队尾是递减的,队首是最大的.队尾是最小的. 队尾接受值,队首排出值. Java实现用双端队列,前面接收值,后面排出来值. 这类题目往往是跟滑动窗口一起 ...

  2. 洛谷—— P1714 切蛋糕

    https://www.luogu.org/problem/show?pid=1714 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每 ...

  3. 洛谷 P1714 切蛋糕

    题目链接 题目描述 今天是 Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大 ...

  4. 洛谷 - P1714 切蛋糕(单调队列+前缀和+思维)

    题目链接:点击查看 题目大意:给出一个由n个数组成的序列,求长度不超过m的连续子段和中的最大值 题目分析:因为给出了一个限制条件,所以这就不能当普通的动态规划来做了,我们可以跑一遍前缀和,然后枚举每一 ...

  5. 【寒假每日一题】洛谷 P7471 [NOI Online 2021 入门组] 切蛋糕

    题目链接:P7471 [NOI Online 2021 入门组] 切蛋糕 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 Alice.Bob 和 Cindy 三个好朋友得到 ...

  6. 洛谷刷题C语言:切蛋糕、概率、Bridž、NOTE、DOMINO

    记录洛谷刷题C语言qaq [NOI Online 2021 入门组] 切蛋糕 题目描述 Alice.Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕. 三个人的需求量分别为 ...

  7. P1714 切蛋糕(线段树+前缀和)

    P1714 切蛋糕 解题思路:求连续区间不超过k的最大值.先求出前缀和,线段树维护前缀和,在一个长度为k的区间,找到前缀和最小的,用最后的值减去这个值,得到的就是在这个区间里的最大值.如果长度不能到达 ...

  8. 切绳子【洛谷P1577】【二分】

    切绳子[洛谷P1577][二分] 文章目录 切绳子[洛谷`P1577`][二分] 题目描述 输入格式 输出格式 输入 输出 代码 题目描述 有 N 条绳子,它们的长度分别为 Li.如果从它们中切割出 ...

  9. 洛谷——P1056 排座椅

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳. 同 ...

最新文章

  1. 学姐分享:在求职路上少走一些弯路
  2. File Explore 中data权限修改,实体机
  3. 百度前端技术学院html任务,重回百度前端技术学院第一天 HTML复习
  4. 初识Mysql(part2)--我需要知道的8个Mysql语句
  5. ubuntu php mysql apache_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)(转)
  6. Java数组基础笔记(引用、字符串数组)
  7. 文件系统04 - 零基础入门学习Delphi37
  8. java 判断是否整数倍_java怎样实现判断一个最高达1000位数字的整数是不是3的倍数。...
  9. linux Centos 服务器之间文件共享挂载
  10. 乘法口诀表 java_利用java 实现一个九九乘法口诀表
  11. 关于DNF的多媒体包NPK文件的那些事儿(10) - SPK文件
  12. ParaView的简单用法
  13. 快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
  14. VMware虚拟机XP系统安装图文教程
  15. windows网络防火墙开发二三事
  16. 美团面试小感——认知撑起的格局
  17. **使用InkScape绘制简易字母LOGO的教程**
  18. java ebcdic编码转换_JAVA实现ASCII码与EBCDIC码的相互转换
  19. CUDA指定GPU的使用方法
  20. MyBatis自定义自定义动态SQL解析方式

热门文章

  1. Java面向对象综合训练综合练习
  2. JavaWeb项目1-QQZone
  3. 《缠中说禅108课》80:市场没有同情、不信眼泪
  4. altera fpga 型号说明_Actel与Altera、Xilinx的FPGA选型对比参考
  5. excel中替换功能的新颖用法
  6. PHPYUN人才招聘系统 V5.0商业授权vip版和授权版及旗舰版有什么区别
  7. 梯度累积(Gradient Accumulation)
  8. CMake I add_custom_command命令详解(构建)
  9. 读论文:Charting the Right Manifold:Manifold Mixup for Few-shot Learning
  10. 求最小公倍数(C++牛客网)