6001 2023. 10. 15 12:26:48 Catt Benzinkút üzemeltetés (55) cpp17 Hibás válasz 0/55 7ms 11928 KiB
#include <iostream>
#include <vector>

using namespace std;

struct RestStop {
    int distance;
    int profit;
};

int main() {
    int N, K;
    cin >> N >> K;

    vector<RestStop> restStops(N + 1);
    vector<vector<int>> dp(N + 1, vector<int>(N + 1, 0));

    for (int i = 1; i <= N; i++) {
        cin >> restStops[i].distance >> restStops[i].profit;
    }

    for (int i = 1; i <= N; i++) {
        for (int j = i - 1; j >= 0; j--) {
            dp[i][j] = max(dp[i][j], dp[i - 1][j]);

            int distance = restStops[i].distance - restStops[j].distance;

            if (distance >= K) {
                dp[i][j] = max(dp[i][j], dp[j][j] + restStops[i].profit);
            }
        }
    }

    int maxProfit = 0;
    int lastStop = 0;
    for (int i = 1; i <= N; i++) {
        if (dp[N][i] > maxProfit) {
            maxProfit = dp[N][i];
            lastStop = i;
        }
    }

    cout << maxProfit << endl;

    vector<int> chosenStops;
    for (int i = lastStop; i >= 1; i--) {
        if (dp[lastStop][i] > dp[lastStop][i - 1]) {
            chosenStops.push_back(i);
            lastStop = i - 1;
        }
    }

    cout << chosenStops.size() << endl;
    for (int i = chosenStops.size() - 1; i >= 0; i--) {
        cout << chosenStops[i] << " ";
    }

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 0/55
1 Hibás válasz 0/0 3ms 1944 KiB
2 Hibás válasz 0/0 7ms 10008 KiB
3 Hibás válasz 0/3 3ms 2296 KiB
4 Hibás válasz 0/3 3ms 2508 KiB
5 Hibás válasz 0/3 3ms 2732 KiB
6 Hibás válasz 0/3 3ms 2964 KiB
7 Hibás válasz 0/3 3ms 2908 KiB
8 Hibás válasz 0/3 3ms 3040 KiB
9 Hibás válasz 0/3 3ms 3172 KiB
10 Hibás válasz 0/3 3ms 3264 KiB
11 Hibás válasz 0/3 3ms 3564 KiB
12 Hibás válasz 0/3 4ms 5556 KiB
13 Hibás válasz 0/4 4ms 6528 KiB
14 Hibás válasz 0/4 4ms 7516 KiB
15 Hibás válasz 0/5 6ms 8764 KiB
16 Hibás válasz 0/6 7ms 10088 KiB
17 Hibás válasz 0/6 7ms 11928 KiB