Submission #1308988

#TimeUsernameProblemLanguageResultExecution timeMemory
1308988Born_To_LaughKitchen (BOI19_kitchen)C++17
29 / 100
17 ms1100 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;
#define int ll
const int maxn = 310;
int n, m, k;
ll 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;
    }
    
    for(int i=1; i<=m; ++i)cin >> a[i];
    if(accumulate(a + 1, a + 1 + m, 0ll) < suma){
        cout << "Impossible\n";
        return;
    }
    sort(a + 1, a + 1 + m);
    
    vector<int> dp(9e4 + 5, -INF);
    dp[0] = 0;
    for(int i=1; i<=m; ++i){
        for(int j=9e4 + 3 - a[i]; j >= 0; j--){
            dp[j + a[i]] = max(dp[j + a[i]], dp[j] + 1);
        }
    }
    int ans = -INF;
    for(int i=suma; i<=9e4 + 3; ++i){
        if(dp[i] >= k){
            ans = i;
            break;
        }
    }
    if(ans == -INF)cout << "Impossible\n";
    else cout << ans - suma << '\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...