全部评论 1

  • #include <bits/stdc++.h>
    using namespace std;
    struct O{
        int a,end,cost,v,wei;
        O(int a,int end,int cost,int v):a(a),end(end),cost(cost),v(v),wei(cost-v){}
    };
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n,t;
        cin>>n>>t;
        vector<int>a(n);
        for(int i=0;i<n;++i){
            cin>>a[i];
        }
        vector<O>o;
        long long sum=0;
        for(int i=0;i<n;++i){
            int cost,v;
            cin>>cost>>v;
            sum+=v;
            int end=a[i]+t-1;
            o.emplace_back(a[i],end,cost,v);
        }
        sort(o.begin(),o.end(),[](const O&x,const O&y){
            if(x.end!=y.end)return x.end<y.end;
            return x.a<y.a;
        });
        vector<int>ends;
        ends.reserve(n);
        for(const auto&opt:o){
            ends.push_back(opt.end);
        }
        vector<long long>dp(n+1,0);
        for(int i=1;i<=n;++i){
            const auto&opt=o[i-1];
            int target=opt.a-1;
            auto it=upper_bound(ends.begin(),ends.end(),target);
            int idx=it-ends.begin()-1;
            long long take=(idx>=0?dp[idx+1]:0)+opt.wei;
            long long ake=dp[i-1];
            dp[i]=min(take,ake);
        }
        cout<<sum+dp[n];
        return 0;
    }
    

    昨天 来自 浙江

    1

热门讨论