17902022-12-03 15:48:06kovacs.peter.18fBenzinkút üzemeltetés (55)cpp11Hibás válasz 46/5513ms27380 KiB
#include <iostream>
#include <vector>
#include <stack>

using namespace std;

struct point {
    int benefit = 0, distance = 0, last_index = 0;
};

int main() {
    cin.sync_with_stdio(false);
    cin.tie(nullptr);

    int N, K, T, H;
    cin >> N >> K;
    vector<point> dpS(1000001);
    for (int i = 0, index = 1; i < N; i++) {
        cin >> T >> H;
        while (index <= T) {
            dpS[index] = dpS[index - 1];
            ++index;
        }
        if (T > K && dpS[T - K].benefit + H > dpS[T].benefit) {
            dpS[T].benefit = dpS[T - K].benefit + H;
            dpS[T].distance = T;
            dpS[T].last_index = i;
        }
        else if (H > dpS[T].benefit) {
            dpS[T].benefit = H;
            dpS[T].distance = T;
            dpS[T].last_index = i;
        }
    }
    stack<point> answerS;
    answerS.push(dpS[T]);
    while (answerS.top().distance > K) {
        answerS.push(dpS[answerS.top().distance - K]);
    }
    cout << dpS[T].benefit << '\n' << answerS.size() << " ";
    while (!answerS.empty()) {
        cout << answerS.top().last_index + 1 << " ";
        answerS.pop();
    }
    cout << '\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base46/55
1Elfogadva0/013ms25256 KiB
2Elfogadva0/010ms25448 KiB
3Elfogadva3/39ms25396 KiB
4Elfogadva3/312ms25652 KiB
5Hibás válasz0/313ms25992 KiB
6Elfogadva3/312ms26068 KiB
7Elfogadva3/312ms26472 KiB
8Elfogadva3/310ms26580 KiB
9Elfogadva3/39ms26788 KiB
10Elfogadva3/39ms26860 KiB
11Elfogadva3/39ms26988 KiB
12Elfogadva3/312ms27196 KiB
13Elfogadva4/410ms27212 KiB
14Elfogadva4/412ms27172 KiB
15Elfogadva5/510ms27300 KiB
16Hibás válasz0/69ms27380 KiB
17Elfogadva6/610ms27376 KiB