5748 2023. 09. 16 11:42:55 Ablablabla Benzinkút üzemeltetés (55) cpp17 Hibás válasz 6/55 28ms 19440 KiB
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

int n, k;
vector<int> tavok;
vector<int> haszon;
vector<vector<pii>> dp;

int megold(int akt, int elozo){
    if(akt == n + 1){
        return 0;
    } else if(dp[akt][elozo] != (pii){-1, -1}){
        return dp[akt][elozo].first;
    }

    int a = 0;
    int b = megold(akt + 1, elozo);

    if(tavok[akt] - tavok[elozo] >= k){
        a = megold(akt + 1, akt) + haszon[akt];
    }

    if(a > b){
        dp[akt][elozo] = {a, 0};
    } else{
        dp[akt][elozo] = {b, 1};
    }

    return dp[akt][elozo].first;
}



int main()
{
    cin >> n >> k;

    tavok.assign(n + 1, 0);
    haszon.assign(n + 1, 0);
    tavok[0] = 0 - k - 1;
    haszon[0] = 0 - k - 1;

    for(int i = 1; i <= n; i++){
        cin >> tavok[i] >> haszon[i];
    }

    dp.assign(n + 1, vector<pii>(n + 1, {-1, -1}));
    int maxi = megold(1, 0);
    cout << maxi << "\n";

    int akt = 1;
    int elozo = 0;
    vector<int> kutak;

    while(akt <= n){
        if(dp[akt][elozo].second == 0){
            kutak.push_back(akt);
            akt++;
            elozo = akt;
        } else{
            akt++;
        }
    }

    cout << kutak.size() << " ";
    for(int x : kutak){
        cout << x << " ";
    }
    cout << "\n";
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 6/55
1 Elfogadva 0/0 3ms 1812 KiB
2 Hibás válasz 0/0 28ms 17616 KiB
3 Hibás válasz 0/3 3ms 2192 KiB
4 Hibás válasz 0/3 2ms 2288 KiB
5 Elfogadva 3/3 2ms 2520 KiB
6 Hibás válasz 0/3 3ms 2616 KiB
7 Elfogadva 3/3 3ms 2728 KiB
8 Hibás válasz 0/3 3ms 2840 KiB
9 Hibás válasz 0/3 3ms 3408 KiB
10 Hibás válasz 0/3 3ms 3424 KiB
11 Hibás válasz 0/3 3ms 3836 KiB
12 Hibás válasz 0/3 8ms 7664 KiB
13 Hibás válasz 0/4 10ms 9336 KiB
14 Hibás válasz 0/4 14ms 11412 KiB
15 Hibás válasz 0/5 19ms 13676 KiB
16 Hibás válasz 0/6 23ms 16280 KiB
17 Hibás válasz 0/6 27ms 19440 KiB