제출 #422778

#제출 시각아이디문제언어결과실행 시간메모리
422778aryan12Kitchen (BOI19_kitchen)C++17
100 / 100
99 ms972 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());

void Solve() {
    int n, m, k;
    cin >> n >> m >> k;
    vector<int> a(n + 1), b(m + 1);
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for(int i = 1; i <= m; i++) {
        cin >> b[i];
    }
    for(int i = 1; i <= n; i++) {
        if(a[i] < k) {
            cout << "Impossible\n";
            return;
        }
    }
    int sum = 0;
    for(int i = 1; i <= m; i++) {
        sum += b[i];
    }
    vector<int> dp(sum + 1, INT_MIN);
    dp[0] = 0;
    for(int i = 1; i <= m; i++) {
        for(int j = sum - b[i]; j >= 0; j--) {
            dp[j + b[i]] = max(dp[j + b[i]], dp[j] + min(n, b[i]));
        }
    }
    int min_req = 0;
    for(int i = 1; i <= n; i++) {
        min_req += a[i];
    }
    /*for(int i = 0; i <= sum; i++) {
        cout << dp[i] << " ";
    }
    cout << "\n";*/
    for(int i = min_req; i <= sum; i++) {
        if(dp[i] >= n * k) {
            cout << i - min_req << "\n";
            return;
        }
    }
    cout << "Impossible\n";
} 

int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    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...