Submission #794123

#TimeUsernameProblemLanguageResultExecution timeMemory
794123gun_ganKitchen (BOI19_kitchen)C++17
100 / 100
80 ms111532 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MX = 305; int N, M, K; int dp[MX][MX * MX]; int a[MX], b[MX]; int main() { cin.tie(0); ios_base::sync_with_stdio(0); memset(dp, -1, sizeof dp); cin >> N >> M >> K; ll sum = 0; bool bad = M < K; for(int i = 1; i <= N; i++) { cin >> a[i]; sum += a[i]; bad |= a[i] < K; } for(int i = 1; i <= M; i++) cin >> b[i]; if(bad) { cout << "Impossible\n"; return 0; } dp[0][0] = 0; for(int i = 1; i <= M; i++) { for(int s = 0; s < MX * MX; s++) { dp[i][s] = max(dp[i][s], dp[i - 1][s]); if(s >= b[i] && dp[i - 1][s - b[i]] != -1) dp[i][s] = max(dp[i][s], dp[i - 1][s - b[i]] + min(N, b[i])); } } for(int s = sum; s < MX * MX; s++) { if(dp[M][s] >= K * N) { cout << s - sum << '\n'; return 0; } } cout << "Impossible\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...