Submission #1200822

#TimeUsernameProblemLanguageResultExecution timeMemory
1200822AiperiiiKitchen (BOI19_kitchen)C++20
50 / 100
119 ms196936 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define ff first
#define ss second
#define pb push_back

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n,m,k;
    cin>>n>>m>>k;
    vector <int> a(n+1),b(m+1);
    int suma=0,sumb=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        suma+=a[i];
        
    }
   
    for(int i=1;i<=m;i++){
        cin>>b[i];
        sumb+=b[i];
    }
    
    for(int i=1;i<=n;i++){
        if(a[i]<k){
            cout<<"Impossible\n";
            return 0;
        }
    }
    vector <vector <int > > dp(m+1, vector <int> (sumb+1,-1));
    dp[0][0]=0;
    
    for(int i=1;i<=m;i++){
        dp[i][0]=0;
        for(int j=b[i];j<=sumb;j++){
            int mx=-1;
            if(dp[i-1][j-b[i]]!=-1){
                mx=max(mx,dp[i-1][j-b[i]]+min(n,b[i]));
            }
            if(dp[i-1][j]!=-1){
                mx=max(mx,dp[i-1][j]);
            }
            dp[i][j]=mx;
            
        }
        //cout<<"\n";
    }
    int mn=1e18;
    for(int i=1;i<=m;i++){
        for(int j=suma;j<=sumb;j++){
            if(dp[i][j]!=-1 && dp[i][j]>=n*k){
                mn=min(mn,j-suma);
            }
        }
    }
    if(mn==1e18){
        cout<<"Impossible\n";
        return 0;
    }
    cout<<mn<<"\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...