首页 > 其他分享 >洛谷P1714切蛋糕题解

洛谷P1714切蛋糕题解

时间:2022-08-15 19:55:07浏览次数:88  
标签:le 洛谷 P1714 int 题解 sum 蛋糕 幸运值 端点

题目描述

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

小 Z 作为寿星,自然希望吃到的蛋糕的幸运值总和最大,但小 Z 最多又只能吃 \(m(m\le n)\) 小块的蛋糕。

请你帮他从这 \(n\) 小块中找出连续的 \(k(1 \le k\le m)\) 块蛋糕,使得其上的总幸运值最大。

形式化地,在数列 \(\{p_n\}\) 中,找出一个子段 \([l,r](r-l+1\le m)\),最大化 \(\sum\limits_{i=l}^rp_i\)。

题目分析

欸?这题这么简单?这不就暴力枚举左右端点,前缀和数组 \(O(1)\) 查询区间和,取最大值不就行了?

嗯……是个好思路,够暴力,但是吧……

对于 \(20\%\) 的数据,有 \(1\le n\le100\)。
对于 \(100\%\) 的数据,有 \(1\le n\le5\times 10^5\)

暴力做法好像不太行

考虑优化

从 \(1\) 到 \(n\) 枚举右端点r,设此时左端点为l,最后幸运值总和就是sum[r]-sum[l-1]

由于我们要最大化幸运值,因此我们希望sum[l-1]最小

题目中还有一个限制

小 Z 最多只能吃 \(m(m\le n)\) 小块的蛋糕。

因此 \(r-l+1 \le m\)

所以我们要找到的就是在以r-1为右端点的,长度为m-1的区间中的最小值

这道题至此就被成功的转化为了滑动窗口求最值的问题

可以用单调队列来维护

AC代码

#include<iostream>
#include<deque>

using namespace std;

const int N=500010;

int n,m;
int a[N];
int ans=-2e9;
deque<int> q;

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		a[i]+=a[i-1];
	}
	for(int i=0;i<=n;i++)
	{
		while(!q.empty()&&q.front()<i-m+1)
			q.pop_front();
		while(!q.empty()&&a[q.back()]>a[i])
			q.pop_back();
		q.push_back(i);
		ans=max(ans,a[i]-a[q.front()]);
	}
	cout<<ans<<endl;
	
	return 0;
} 

完结撒花~~~

标签:le,洛谷,P1714,int,题解,sum,蛋糕,幸运值,端点
From: https://www.cnblogs.com/Orange-Star/p/16583679.html

相关文章

  • 【题解】【Shopping】【树上依赖型背包】
    很厉害的题。在任务计划里躺了一年。。。题目传送门思考之路题目要让我们在付出不超过m的代价在树上找到一个权值最大的连通块。容易想到树形dp,设\(f_{i,j}\)表示选的......
  • 洛谷P2622 关灯问题II引发的关于DP实现形式及后效性的思考
      动态规划要求已经求解的子问题不受后续阶段的影响,即无后效性。而在这种递推的实现方式中,后面枚举的状态可能更新前面已经枚举过的状态。也就是说,这种递推的实现方式是......
  • "蔚来杯"2022牛客暑期多校训练营7 题解
    C.ConstructiveProblemsNeverDie对于出现次数大于1的数字,用出现次数为0的数字填充。剩下的数字一定两两互不相同,对这些数循环移位,最后进行判断即可。#include<bits/......
  • CF1712B Woeful Permutation 题解
    题目传送门题目简介给定一个正整数\(n\),构造一个数列\(p\),使\(1\)到\(n\)中每一个数都出现且只出现\(1\)次。求最大的\(\sum\limits_{i=1}^n\operatorname......
  • Codeforces Round #813 (Div. 2) 题解A~E2
    https://codeforces.com/contest/1712估计也就我赛中才D都写不出来了A题题意:给你一个数组和一个正整数\(k\),每次可以选择数组的任意两个数交换,问你最少交换多少次能使......
  • CF1714C 题解
    题目大意找到最小的数字,使该数字每一位上的数字的和等于给定的数字\(s\),且其中的所有数字都不同,即所有数字都是唯一的。解法这题的数据很水,暴力就能过,从小到大枚举每......
  • ubuntu dpkg问题解决
    问题今天玩ubuntu发现以下报错:dpkgwasinterrupted,youmustmanuallyrunsudodpkg–configure-atocorrecttheproblem 解决sudorm/var/lib/apt/lists/l......
  • LGP8474题解
    很萌萌的数数题。考虑设\(dp[n]\)表示\(n\)的答案。考虑对于一个长度为\(n\)的排列,令排列的所有元素\(+1\),然后塞一个\(1\)进去。容易发现,逆序对增加的数量和......
  • 洛谷 P1654 OSU!
    思路考虑\(DP\)转移,设\(F[i]\)表示长度为\(i\)序列的期望分数。得到如下转移:\(F[i]=(F[i-1]-A[i-1]+A[i])p_i+F[i-1](1-p_i)\)其中\(A[i]\)的意义是:以\(i\)......
  • Gym102798 CCPC2020威海E加强版 题解
    原题link把\(m\)和\(a_i\)的上界改成\(200\),其他不变.基本思路:枚举\(S\),求出\(p(S)\)表示集合\(S\)中的怪兽被打死的概率,答案就是\(\sum_{S}|S|p(S)\).而这......