Submission #477504

#TimeUsernameProblemLanguageResultExecution timeMemory
477504Sohsoh84Kitchen (BOI19_kitchen)C++17
100 / 100
83 ms108460 KiB
// ¯\_(ツ)_/¯ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 300 + 3; const ll INF = 1e9; const ll MOD = 1e9 + 7; // 998244353; // 1e9 + 9; int dp[MAXN][MAXN * MAXN], n, m, k, B[MAXN], A[MAXN], s; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> k; for (int i = 1; i <= n; i++) { cin >> A[i]; if (A[i] < k) return cout << "Impossible" << endl, 0; s += A[i]; } for (int j = 1; j <= m; j++) cin >> B[j]; fill(dp[0], dp[0] + MAXN * MAXN, -INF); dp[0][0] = 0; for (int i = 1; i <= m; i++) { for (int h = 0; h < MAXN * MAXN; h++) { dp[i][h] = dp[i - 1][h]; int c = min(n, B[i]); if (h >= B[i]) dp[i][h] = max(dp[i][h], dp[i - 1][h - B[i]] + c); } } for (int i = s; i < MAXN * MAXN; i++) if (dp[m][i] >= n * k) return cout << i - s << endl, 0; cout << "Impossible" << endl; return 0; }
#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...