Submission #977618

#TimeUsernameProblemLanguageResultExecution timeMemory
977618efedmrlrKitchen (BOI19_kitchen)C++17
100 / 100
93 ms1400 KiB
#include <bits/stdc++.h> #define lli long long int #define ld long double #define pb push_back #define MP make_pair #define all(x) x.begin(), x.end() #define rall(x) x.begin(), x.end() #define REP(i, n) for(int i = 0; (i) < (n); (i)++) using namespace std; void fastio() { ios_base::sync_with_stdio(false); cin.tie(NULL); } const int N = 305; const int INF = 1e9 + 500; const int MOD = 1e9 + 7; bitset<N * N> dp1, dp1n; array<int, N * N> dp2, dp2n; int n, m, k; int sum = 0; vector<int> a, b; void solve() { cin >> n >> m >> k; a.resize(n + 1, 0); b.assign(m + 1, 0); bool f = 0; for(int i = 1; i <= n; i++) { cin >> a[i]; if(a[i] < k) f = 1; sum += a[i]; } int mid = 0; int bsum = 0; for(int i = 1; i <= m; i++) { cin >> b[i]; bsum += b[i]; if(b[i] <= n) mid++; } if(f) { cout << "Impossible\n"; return; } sort(all(b)); REP(i, N * N) { dp1[i] = 0; } dp1[0] = 1; for(int i = 1; i <= mid; i++) { for(int j = 0; j <= bsum; j++) { dp1n[j] = dp1[j]; if(j - b[i] >= 0) { dp1n[j] = dp1n[j] | dp1[j - b[i]]; } } swap(dp1, dp1n); } REP(j, N * N) { dp2[j] = -1; } REP(i, bsum + 1) { if(dp1[i]) { int x = i / n; dp2[i] = max(x, dp2[i]); } } for(int i = mid + 1; i <= m; i++) { for(int s = 0; s <= bsum; s++) { dp2n[s] = dp2[s]; if(s - b[i] >= 0 && dp2[s - b[i]] != -1) { dp2n[s] = max(dp2n[s], dp2[s - b[i]] + 1); } } swap(dp2, dp2n); } for(int s = sum; s <= bsum; s++) { if(dp2[s] >= k) { cout << s - sum << "\n"; return; } } cout << "Impossible\n"; } signed main() { fastio(); solve(); }
#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...