제출 #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...