答案是 468,我的输出是 460
#include <bits/stdc++.h>
using namespace std;
int n,d,k,x[500005],s[500005],dp[500005];
const int INF=0x80808080;
bool check(int m) {
memset(dp,0x80,sizeof(dp));
dp[0]=0;
int l=0;
for (int i=1;i<=n;i++) {
while (x[i]-x[l]>d+m) l++;
for (int j=l;j<i && x[i]-x[j]>=d-m;j++) {
dp[i]=max(dp[j]+s[i],dp[i]);
}
//if (m==26) printf("%d %d %d\n",m,i,dp[i]);
if (dp[i]>=k) return 1;
}
return 0;
}
int main() {
scanf("%d%d%d",&n,&d,&k);
long long cnt=0;
for (int i=1;i<=n;i++) {
scanf("%d%d",&x[i],&s[i]);
if (s[i]>0) cnt+=s[i];
}
if (cnt<k) {
printf("%d",-1);
return 0;
}
int lt=0,rt=x[n]-x[1];
while (lt<=rt) {
int md=(9*lt+rt)/10;
if (check(md)) rt=md-1;
else lt=md+1;
//printf("%d %d\n",lt,rt);
}
if (check(lt)) printf("%d",lt);
else printf("%d",-1);
}