Submission #745846

#TimeUsernameProblemLanguageResultExecution timeMemory
745846vjudge1Kitchen (BOI19_kitchen)C++17
52 / 100
456 ms22948 KiB
#include <iostream>
#include <vector>

using namespace std;

int const MAX_N = 300;
int const MAX_M = 15;
int const MAX_WORK = MAX_N * (MAX_M + 1);

bool dp[MAX_WORK + 1][MAX_WORK + 1];

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

    int n, m, k;
    cin >> n >> m >> k;

    vector<int> a(n);
    int total_work = 0;

    for (int& x : a) {
        cin >> x;

        total_work += x;

        if (x < k) {
            cout << "Impossible\n";
            return 0;
        }
    }

    int const difference_work = n * k;

    if (total_work > MAX_WORK || difference_work > MAX_WORK) {
        cout << "Impossible\n";
        return 0;
    }

    vector<int> b(m);
    for (int& x : b)
        cin >> x;

    dp[0][0] = true;

    for (int const& chef : b) {
        int const delta_d = min(chef, n);
        int const delta_t = chef;

        for (int d = MAX_WORK; d >= delta_d; d--) {
            for (int t = MAX_WORK; t >= delta_t; t--) {
                dp[d][t] |= dp[d - delta_d][t - delta_t];

                // if (dp[d][t]) {
                //     cout << "dp[" << d << "][" << t << "] possible!\n";
                // }
            }
        }
    }

    for (int t = total_work; t <= MAX_WORK; t++) {
        for (int d = difference_work; d <= MAX_WORK; d++) {
            if (dp[d][t]) {
                cout << t - total_work << "\n";
                return 0;
            }
        }
    }

    cout << "Impossible\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...