212442026-01-12 17:26:19algoproBenzinkút üzemeltetés (55)cpp17Accepted 55/552ms540 KiB
// UUID: 133330ec-e98e-4209-b515-00089a4d92da
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> t(n), h(n);
    for(int i = 0; i < n; i++) cin >> t[i] >> h[i];
    vector<int> dp(n,0), prev(n,-1);
    vector<bool> take(n,false);
    dp[0] = h[0];
    take[0] = true;
    for(int i=1;i<n;i++){
        int best = 0;
        int best_j = -1;
        for(int j=i-1;j>=0;j--){
            if(t[i]-t[j]>=k && dp[j] > best){
                best = dp[j];
                best_j = j;
            }
        }
        if(best + h[i] > dp[i-1]){
            dp[i] = best + h[i];
            prev[i] = best_j;
            take[i] = true;
        } else {
            dp[i] = dp[i-1];
            take[i] = false;
        }
    }

    vector<int> chosen;
    int i = n-1;
    while(i >= 0){
        if(take[i]){
            chosen.push_back(i+1); 
            i = prev[i];
        } else {
            i--;
        }
    }

    reverse(chosen.begin(), chosen.end());

    cout << dp[n-1] << "\n";
    cout << chosen.size();
    for(int idx: chosen) cout << " " << idx;
    cout << "\n";

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/01ms316 KiB
2Accepted0/02ms316 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted3/31ms316 KiB
8Accepted3/31ms500 KiB
9Accepted3/32ms540 KiB
10Accepted3/31ms316 KiB
11Accepted3/31ms332 KiB
12Accepted3/31ms316 KiB
13Accepted4/42ms316 KiB
14Accepted4/42ms316 KiB
15Accepted5/52ms316 KiB
16Accepted6/62ms316 KiB
17Accepted6/62ms508 KiB