제출 #714556

#제출 시각아이디문제언어결과실행 시간메모리
714556amirhoseinfar1385Kitchen (BOI19_kitchen)C++17
100 / 100
60 ms1100 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=300+10; int dp[maxn*maxn],fake[maxn*maxn],inf=1e9+5; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i=0;i<maxn*maxn;i++){ dp[i]=-inf; } int n,m,k; cin>>n>>m>>k; vector<int>alln(n),allm(m); int f=0; int sumn=0; for(int i=0;i<n;i++){ cin>>alln[i]; if(alln[i]<k){ f=1; } sumn+=alln[i]; } int summ=0,mainsumm=0; for(int i=0;i<m;i++){ cin>>allm[i]; summ+=min(allm[i],n); mainsumm+=allm[i]; } if(f==1||summ<n*k||mainsumm<sumn){ cout<<"Impossible\n"; return 0; } int res=inf; dp[0]=0; for(int i=0;i<m;i++){ for(int j=0;j<maxn*maxn;j++){ fake[j]=dp[j]; dp[j]=-inf; } for(int j=0;j<maxn*maxn;j++){ if(j<allm[i]){ dp[j]=fake[j]; continue; } dp[j]=max(fake[j],fake[j-allm[i]]+min(n,allm[i])); } } //cout<<dp[4]<<" "<<dp[7]<<" "<<dp[3]<<"\n"; for(int i=0;i<maxn*maxn;i++){ if(i>=sumn&&dp[i]>=n*k){ res=min(res,i-sumn); } } cout<<res<<"\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...