Submission #1309045

#TimeUsernameProblemLanguageResultExecution timeMemory
1309045Born_To_LaughKitchen (BOI19_kitchen)C++17
100 / 100
19 ms588 KiB
// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const ll MOD = 998244353, INF = 1e9 + 7;

const int maxn = 310;
const int maxx = 9e4 + 5;
int n, m, k;
int a[maxn];

void solve(){
    cin >> n >> m >> k;
    ll suma = 0;
    for(int i=1; i<=n; ++i){
        int x;cin >> x;
        if(x < k){
            cout << "Impossible\n";
            return;
        }
        suma += x;
    }
    ll sum0 = 0;
    for(int i=1; i<=m; ++i){
        cin >> a[i];
        sum0 += a[i];
    }
    if(sum0 < suma){
        cout << "Impossible\n";
        return;
    }
    
    vector<int> dp(maxx, -INF);
    dp[0] = 0;
    for(int i=1; i<=m; ++i){
        for(int j=sum0 - a[i]; j>=0; j--){
            if(dp[j] == -INF)continue;
            dp[j + a[i]] = max(dp[j + a[i]], dp[j] + min(a[i], n));
        }
    }
    for(int i=suma; i<=sum0; ++i){
        if(dp[i] >= n * k){
            cout << i - suma << '\n';
            return;
        }
    }
    cout << "Impossible\n";
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
}
#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...