7915 2024. 01. 11 22:26:34 adam Benzinkút üzemeltetés (55) cpp17 Elfogadva 55/55 28ms 19064 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> dist, profit;
int stop_count, min_dist;

vector<vector<pair<int, int>>> memo;

int solve(int n, int before) {
    if(n == stop_count+1) return 0;
    else if (memo[n][before] != pair(-1, -1)) return memo[n][before].first;
    int answer = 0;

    int b = solve(n + 1, before);

    if (dist[n] - dist[before] >= min_dist) {
        answer = profit[n] + solve(n+1, n);
    }
    if (answer > b) {
        memo[n][before] = {answer, 0};
    } else {
        memo[n][before] = {b, 1};
    }
    return memo[n][before].first;
}



int main() {

    cin >> stop_count >> min_dist;
    dist.assign(stop_count +1, 0);
    profit.assign(stop_count +1, 0);
    dist[0] = 0 - min_dist - 1;
    profit[0] = 0 - min_dist - 1;
    memo.assign(stop_count + 1, vector<pair<int, int>>(stop_count+1, {-1, -1}));


    for (int i = 1; i <= stop_count; i++) {
        cin >> dist[i] >> profit[i];
    }

    cout << solve(1, 0) << endl;

    vector<int> stations;
    int actual = 1;
    int before = 0;
    while(actual <= stop_count) {
        if(memo[actual][before].second == 0) {
            stations.push_back(actual);
            before = actual++;
        } else {
            actual++;
        }
    }
    cout << stations.size() << " ";
    for (int x : stations) {
        cout << x << " ";
    }


}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 55/55
1 Elfogadva 0/0 3ms 1816 KiB
2 Elfogadva 0/0 28ms 17696 KiB
3 Elfogadva 3/3 3ms 2212 KiB
4 Elfogadva 3/3 2ms 2324 KiB
5 Elfogadva 3/3 3ms 2528 KiB
6 Elfogadva 3/3 3ms 2740 KiB
7 Elfogadva 3/3 2ms 2828 KiB
8 Elfogadva 3/3 2ms 2828 KiB
9 Elfogadva 3/3 3ms 3168 KiB
10 Elfogadva 3/3 3ms 3288 KiB
11 Elfogadva 3/3 3ms 3612 KiB
12 Elfogadva 3/3 8ms 7280 KiB
13 Elfogadva 4/4 10ms 8948 KiB
14 Elfogadva 4/4 16ms 10992 KiB
15 Elfogadva 5/5 17ms 13092 KiB
16 Elfogadva 6/6 24ms 15796 KiB
17 Elfogadva 6/6 27ms 19064 KiB