17892022-12-03 15:32:29kovacs.peter.18fBenzinkút üzemeltetés (55)cpp11Hibás válasz 46/5514ms27276 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/010ms25260 KiB
2Elfogadva0/010ms25464 KiB
3Elfogadva3/313ms25676 KiB
4Elfogadva3/310ms25932 KiB
5Hibás válasz0/310ms26172 KiB
6Elfogadva3/310ms26352 KiB
7Elfogadva3/313ms26524 KiB
8Elfogadva3/310ms26660 KiB
9Elfogadva3/310ms26612 KiB
10Elfogadva3/310ms26608 KiB
11Elfogadva3/310ms26608 KiB
12Elfogadva3/310ms26608 KiB
13Elfogadva4/410ms26740 KiB
14Elfogadva4/410ms26820 KiB
15Elfogadva5/510ms26932 KiB
16Hibás válasz0/610ms27068 KiB
17Elfogadva6/614ms27276 KiB