切蛋糕
题目 切蛋糕
思路分析
有n块蛋糕 他要吃连续的m块 要这m块得到的权值最大
其实就转变成了 最大子序和 问题
本来还在想本身就是单调的 幸运值嘛 构造前缀和肯定都大于0
但是一看幸运值还有负……
那就和那题一模一样了
有个问题是 结果如果小于0 要强制输出0 题目没说这个事情 但是检验要求
代码实现
#include<bits/stdc++.h>
using namespace std;
const int N=500010;
int s[N],q[N],hh=0,tt=0;
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;cin>>x;
s[i]=s[i-1]+x;
}
int res=INT_MIN;
for(int i=1;i<=n;i++)
{
if(hh<=tt && i-q[hh]>m)
hh++;
res=max(res,s[i]-s[q[hh]]);
while(hh<=tt && s[i]<=s[q[tt]])
tt--;
q[++tt]=i;
}
cout<<((res<0)?0:res)<<endl;
return 0;
}
💬 评论