P1714切蛋糕(不定区间最值)
题面
今天是小Z的生日,同学们为他带来了一块蛋糕。这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。
小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。
吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。
不定区间长度还是第一次遇到
分析 考虑朴素写法,非常直观。
对于以第i个元素结尾的子段,最大的子段和P(i)可以表示为
P [ i ] = max { sum [ i ] - sum [ j ] , j 属于 [ i-M, i-1 ]
于是有ans = max [ P [ i ] ]
算法的复杂度是O ( N M )
在题目的范围下TLE是必然的
将上面P[i]的计算式改写为
P [ i ] = sum [ i ] - min { sum [ j ] },j属于 [ i-M , i-1 ]
显然,在每次获取 P [ i ] 的时候,Sum [ i ] 是定值,所以 P [ i ] 由 Sum [ j ] 的最小值确定。
于是我们就要想方设法在优于O(M)的时间内实现获取最小的 Sum [ j ] 。
最优时,Sum [ j ] 的性质:
(1)Sum [ j ] ≤ Sum [ x ] x∈ [ i-M , i-1 ]且x≠j
(2)j∈[ i-M , i-1 ]
枚举加优化
考虑设计这样一个数据结构,在更低的时间复杂度内获取最优Sum [ j ] 。
①单调队列
#include <iostream>
using namespace std;
#define max(a,b) (a>b?a:b)
const int maxn=;
int a[maxn],zhui[maxn];
int q[maxn],p[maxn],ans=-,spfa[maxn];
int main()
{
int n,m,tail=,head=;
cin>>n>>m;
for(int i=;i<=n;i++)
{
cin>>a[i];
zhui[i]=zhui[i-]+a[i];
}
for(int i=;i<=n;i++)
{
while(tail>=head&&q[tail]>=zhui[i]) tail--;
q[++tail]=zhui[i];p[tail]=i;
while(p[head]+m<=i) head++;
spfa[i]=q[head];
}
for(int i=;i<=n;i++)
ans=max(ans,zhui[i]-spfa[i-]);
cout<<ans;
}
②ST稀疏表
#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int a[maxn],zhui[maxn];
int ans=-,dis[maxn][];
int query(int l,int r){
int k=log2(r-l+);
return min(dis[l][k],dis[r+-(<<k)][k]);
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=;i<=n;i++)
{
int t;
cin>>t;
zhui[i]=zhui[i-]+t;
dis[i][]=zhui[i];
}
for(int j=;j<=log2(n);j++)
{
for(int i=;i+(<<j)-<=n;i++)
dis[i][j]=min(dis[i][j-],dis[i+(<<(j-))][j-]);
}
for(int i=;i<=n;i++)
{
int l=i-m;//等于是求i-m+1到第i项
if(l<) l=;
ans=max(ans,zhui[i]-query(l,i));
}
cout<<ans;
}
P1714切蛋糕(不定区间最值)的更多相关文章
- 洛谷 P1714 切蛋糕 题解
P1714 切蛋糕 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运 ...
- 洛谷 P1714 切蛋糕 单调队列
这个题比较显然,要用前缀和来做.但只用前缀和是过不去的,会TLE,所以需要进行优化. 对于每个前缀和数组 b 中的元素,都可以找到以 b[i] 结尾的子段最大值 p[i],显然,最终的 ans 就是 ...
- 【洛谷】【动态规划+单调队列】P1714 切蛋糕
[题目描述:] 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但 ...
- P1714 切蛋糕 单调队列
题目: 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大, ...
- 洛谷—— P1714 切蛋糕
https://www.luogu.org/problem/show?pid=1714 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每 ...
- P1714 切蛋糕 dp+单调队列
题意: 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到 ...
- [洛谷P1714]切蛋糕
题目大意:给你n个整数,求出其中长度不超过m的最大字段和. 题解:单调队列维护前缀和最小值,然后用当前值减去当前有效最小值即可 C++ Code: #include<cstdio> usi ...
- 洛谷P1714切蛋糕
题目 该题目就是求这n个数的前缀和所组成的数组的所有子区间的左端点和右端点相差不超过m,且他们的前缀和差最大,求出这个最大值即可. 而朴素算法肯定会T,而我们发现如果前缀和最大的话,则前缀和的值一定是 ...
- 洛谷P1714 切蛋糕(单调队列)
先放代码...... 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=5e5+10,M=0x3f3f3f3f; ...
随机推荐
- CentOS 7 yum安装 k8s 创建Pod一直处于ContainerCreating状态 问题解决
问题描述 使用CentOS7的 yum 包管理器安装了 Kubernetes 集群,使用 kubectl 创建服务成功后,执行 kubectl get pods,发现AGE虽然在不断增加,但状态始终不 ...
- AJ学IOS(37)UI之CALayer
AJ分享,必须精品 CALayer 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能 ...
- 《SQL 反模式》 学习笔记
第一章 引言 GoF 所著的的<设计模式>,在软件领域引入了"设计模式"(design pattern)的概念. 而后,Andrew Koenig 在 1995 年造了 ...
- 借助leetcode题目来了解BFS和DFS
广度优先和深度优先搜索 前言 看着这两个搜索的前提的是读者具备图这一数据结构的基本知识,这些可以直接百度一波就了解了.图也像树一样,遍历具有很多的学问在里面,下面我将借用leetcode的题目讲解一下 ...
- think--数据库的设置
1.在项目下的Common下的Conf下的config.php 配置: 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', / ...
- Python 如何实现 单实例
出处:https://stackoverflow.com/questions/380870/make-sure-only-a-single-instance-of-a-program-is-runni ...
- js基石之---易读、易复用、易重构的 JavaScript 代码规范
易读.易复用.易重构的 JavaScript 代码规范 1.变量命名规范有意义 Bad: const yyyymmdstr = moment().format("YYYY/MM/DD&quo ...
- 利用jsDeliver+github实现免费CDN
title: 利用jsDeliver+github实现免费CDN jsDeliver jsDelivr 是一个免费开源的 CDN 解决方案,用于帮助开发者和站长.包含 JavaScript 库.jQu ...
- WMware中Ubuntu系统安装VMware tools
在VMware的虚拟机中安装完ubuntu之后,继续安装VMware tools. 一般情况下,这时都有光驱的图标,点开就能找到"VMwareTools-10.0.10-4301679.ta ...
- 澳大利亚公共服务部门神速完成Win10部署:4个月完成44000台设备升级
不到一年时间,澳大利亚公共服务部门已经完成Win10系统部署升级,涉及到全部的35000名员工.在2015年,澳大利亚公共服务部门IT员工告知微软,需要更创新的方式远程为居民提供服务,并且效率要更快. ...