RT.
评测记录
代码:
#include<bits/stdc++.h>
using namespace std;
int n,w,s;
long long a,f[5005][5005];
long long ans=-(1<<30);
int main(){
scanf("%d%d%d",&n,&w,&s);
for(int i=1;i<=n;i++){
scanf("%lld",&a);
int l=1,r=0,d[5005];
if(i>w)d[++r]=w;
for(int j=min(i,w);j>=1;j--){
while(l<=r&&d[l]-s>=j)l++;
while(j>0&&l<=r&&f[i-1][d[r]]<=f[i-1][j-1])r--;
if(j>0)d[++r]=j-1;
f[i][j]=f[i-1][d[l]]+j*a;
}
}
for(int i=1;i<=w;i++)ans=max(ans,f[n][i]);
printf("%lld",ans);
return 0;
}
投诉 + 求 debug