P1725 琪露诺(单调队列dp)
这题最开始数据比较水,后来加强了,我没过hack数据,我的代码最主要的问题是有一些点会从前面无法经过的点更新,所以就需要初始化f为最小值
#include<iostream>
#include<cstring>
using namespace std;
#define int long long
const int N=1e6;
int q[N];
int w[N];
int f[N];
signed main(){
int n,l,r;
cin>>n>>l>>r;
int x;
cin>>x;
memset(f,-0x3f,sizeof(f));
f[0]=0;
for(int i=1;i<=n;i++)cin>>w[i];
int h=1,t=0;
int ans=-1e9;
for(int i=l;i<=n;i++){
while(h<=t&&q[h]<i-r)h++;
while(h<=t&&f[q[t]]<=f[i-l])t--;
q[++t]=i-l;
f[i]=f[q[h]]+w[i];
if(i>n-r)ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)