제출 #1195485

#제출 시각아이디문제언어결과실행 시간메모리
1195485simplemind_31Kitchen (BOI19_kitchen)C++20
29 / 100
22 ms328 KiB
#include <bits/stdc++.h> using namespace std; #define ALL(x) x.begin(),x.end() typedef long long ll; int n,k,m,sum,a; bool dp[90001]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n >> m >> k; for(int i=0;i<n;i++){ cin >> a; if(a<k){ cout << "Impossible"; return 0; } sum+=a; } if(m<=2){ vector<int> chef(m); for(int i=0;i<m;i++){ cin >> chef[i]; } if(k>m){ cout << "Impossible"; }else if(m==1){ if(chef[0]>=sum){ cout << chef[0]-sum; }else{ cout << "Impossible"; } }else{ if(k==1){ if(min(chef[0],chef[1])>=sum){ cout << min(chef[0],chef[1])-sum; }else if(max(chef[0],chef[1])>=sum){ cout << max(chef[0],chef[1])-sum; }else if(chef[0]+chef[1]>=sum){ cout << chef[0]+chef[1]-sum; }else{ cout << "Impossible"; } }else{ if(chef[0]+chef[1]>=sum && min(chef[0],chef[1])>=n){ cout << chef[0]+chef[1]-sum; }else{ cout << "Impossible"; } } } }else{ vector<int> nums(m); for(int i=0;i<m;i++){ cin >> nums[i]; } dp[0]=true; for(int i=0;i<m;i++){ for(int j=90000;j>=0;j--){ if(j-nums[i]>=0){ dp[j]|=dp[j-nums[i]]; } } } for(int i=sum;i<=90000;i++){ if(dp[i]){ cout << i-sum; return 0; } } 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...