Submission #874157

#TimeUsernameProblemLanguageResultExecution timeMemory
874157vjudge1Kitchen (BOI19_kitchen)C++17
100 / 100
38 ms824 KiB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;

const int MAXN = 300 + 5;

int dp[MAXN * MAXN];

#define ONLINE_JUDGE
void solve() {
    fill_n(&dp[0], MAXN * MAXN, int(-1E9));

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

    vector <int> a(n);
    for(int &i : a)
        cin >> i;

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

    bool check = true;
    for(int &i : a)
        check &= (k <= i);

    if(!check) {
        return cout << "Impossible", void();
    }

    dp[0] = 0;
    for(int i = 0; i < m; i++) {
        for(int j = MAXN * MAXN -1; j >= b[i]; j--) {
            dp[j] = max(dp[j], dp[j - b[i]] + min(b[i], n));
        }
    }

    int cev = MAXN * MAXN +1, suma = accumulate(a.begin(), a.end(), 0);
    for(int i = MAXN * MAXN -1; i >= suma; i--) {
        if(dp[i] >= n * k) {
            cev = i;
        }
    }

    if(cev == MAXN * MAXN +1)
        cout << "Impossible";
    else 
        cout << cev - suma;
    
    return;
}

signed main() {
    #ifndef ONLINE_JUDGE
        freopen(".in", "r", stdin);
        freopen(".out", "w", stdout);
    #endif

    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int t = 1; //cin >> t;
    for(int i = 1; i <= t; i++) {
        solve();
    }

    return 0;
}
#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...