Submission #1311763

#TimeUsernameProblemLanguageResultExecution timeMemory
1311763hyyhKitchen (BOI19_kitchen)C++20
100 / 100
64 ms111476 KiB
#include <iostream> #include <math.h> #include <vector> #include <string> #include <algorithm> #include <queue> #include <stack> #include <map> #include <cstring> #include <iomanip> #include <set> #include <bitset> using namespace std; using ll = long long; using pii = pair<int,int>; using piii = tuple<int,int,int>; using pibii = tuple<int,bool,int,int>; #define endl '\n' #define f first #define s second int const N = 305; int dp[N][N*N]; int main(){ ios_base::sync_with_stdio(0);cin.tie(0); memset(dp, -1,sizeof dp); int n,m,k;cin >> n >> m >> k; vector<int> stuf(n); int tneed = 0; int kneed = n*k; for(auto &i:stuf){ cin >> i; tneed += i; if(i < k){ cout << "Impossible"; return 0; } } int sum = 0; dp[0][0] = 0; for(int i = 1;i <= m;i++){ int g;cin >> g; int mt = min(g,n); sum += g; for(int j = 0;j <= sum;j++){ if(dp[i-1][j] != -1) dp[i][j] = dp[i-1][j]; if(j >= g && dp[i-1][j-g] != -1) dp[i][j] = max(dp[i][j],dp[i-1][j-g]+mt); //cout << dp[i][j] << " "; } //cout << endl; } int ans = 1e9+7; for(int j = tneed;j <= sum;j++){ if(dp[m][j] >= kneed) ans = min(j-tneed,ans); } if(ans == 1e9+7){ cout << "Impossible"; } else cout << ans; }
#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...