제출 #134962

#제출 시각아이디문제언어결과실행 시간메모리
134962Bodo171Kitchen (BOI19_kitchen)C++14
100 / 100
414 ms4216 KiB
#include <iostream> #include <fstream> #include <bitset> #include <algorithm> using namespace std; const int nmax=305; bitset<nmax*nmax> pot,dp[nmax]; int minim[nmax*nmax]; int a[nmax]; int n,m,k,sum,i,j,x; int main() { //freopen("data.in","r",stdin); ios_base::sync_with_stdio(false); cin>>n>>m>>k; for(i=1;i<=n;i++) { cin>>x;sum+=x; if(x<k) { cout<<"Impossible\n"; return 0; } } for(i=1;i<=m;i++) cin>>a[i]; sort(a+1,a+m+1); pot[0]=1; for(i=1;i<=m&&a[i]<=n;i++) { pot=(pot|(pot<<a[i])); } dp[0][0]=1; for(i=m;i>=1&&a[i]>n;i--) { for(j=m-1;j>=0;j--) dp[j+1]=(dp[j+1]|(dp[j]<<a[i])); } minim[90001]=(1<<30); for(i=90000;i>=0;i--) { if(pot[i]==1) minim[i]=i; else minim[i]=minim[i+1]; } int ans=(1<<30); for(i=0;i<=m;i++) for(j=0;j<=90000;j++) if(dp[i][j]==1) ans=min(ans,j+minim[max(max((k-i)*n,sum-j),0)]); if(ans==(1<<30)) cout<<"Impossible\n"; else cout<<ans-sum; return 0; }
#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...