WA on test 10 求调
查看原帖
WA on test 10 求调
1105993
Misserina楼主2024/8/21 12:49

答案是 468468,我的输出是 460460

#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);
}
2024/8/21 12:49
加载中...