제출 #1199313

#제출 시각아이디문제언어결과실행 시간메모리
1199313dejameiniciarKitchen (BOI19_kitchen)C++20
30 / 100
97 ms8724 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n,m,k,s=0;
    cin>>n>>m>>k;
    vector<ll> V,L,dp1;
    vector<unordered_set<ll>> dp2;
    dp1.assign(90000,0);
    dp2.resize(90000);
    dp1[0]=1;
    dp2[0].insert(0);
    ll caja1=n*k;
    ll caja2=0;
    for(ll i=0;i<n;i++){
        ll a;
        cin>>a;
        if(a>=k){
            caja2+=a-k;
        }else{
            cout<<"Impossible";
            return 0;
        }
        L.push_back(a);
    }
    for(ll i=0;i<m;i++){
        ll a;
        cin>>a;
        V.push_back(a);
    }
    ll a,b,c;
    for(ll i=0;i<m;i++){
        for(ll j=90000;j>=0;j--){
            if(dp1[j]==1){
                b=caja1-j;
                if(V[i]>n){
                    a=n;
                    c=V[i]-n;
                }else{
                    a=V[i];
                    c=0;
                }
                if(a<=b){
                    dp1[j+a]=1;
                    for(auto x:dp2[j]){
                        dp2[j+a].insert(x+c);
                    }
                }else{
                    dp1[j+b]=1;
                    c+=a-b;
                    for(auto x:dp2[j]){
                        dp2[j+b].insert(x+c);
                    }
                }
            }
        }
    }
    ll ans=1000000000;
    for(auto x:dp2[n*k]){
        if(x<ans && x>=caja2){
            ans=x;
        }
    }
    if(ans!=1000000000){
        cout<<ans-caja2;
    }else{
        cout<<"Impossible";
    }
}
#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...