社区讨论
卡了很久了,样例过0pts
P1725琪露诺参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mm8xxply
- 此快照首次捕获于
- 2026/03/02 16:52 上周
- 此快照最后确认于
- 2026/03/05 19:30 5 天前
CPP
#include<bits/stdc++.h>
#define f(q) !q.empty()
using namespace std;
int n,l,r,a[400010],dp[400010],ans=-0x3f3f3f3f;
deque<int> q;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>l>>r;
for(int i=0;i<=n;i++){
cin>>a[i];
}
memset(dp,-63,sizeof(dp));
dp[0]=0;
q.push_back(0);
for(int i=0;i<=n+r-l;i++){
while(f(q)&&q.front()<i+l-r) q.pop_front();
//dp[l,r]的最大值可以用来转移dp[l+r]
//dp[i+l-r,i]的最大值可以用来转移dp[i+l]
if(!f(q)) continue;
dp[i+l]=dp[q.front()]+a[i+l];
while(f(q)&&dp[q.back()]<dp[i]) q.pop_back();
q.push_back(i);
}
for(int i=n+1;i<=n+r;i++){
ans=max(ans,dp[i]);
}
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...