# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1224142 | sleepntsheep | Kitchen (BOI19_kitchen) | C++17 | 0 ms | 0 KiB |
#include <stdio.h>
#include <bitset>
#define N 405
int n, m, k, a[N], b[N], sum, ans = 1e9;
std::bitset<N * N> dp[2][N * N];
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]), sum += a[i];
if (a[i] < k) {
puts("Impossible");
return 0;
}
}
dp[0][0][0] = 1;
for (int i = 1; i <= m; ++i) {
scanf("%d", &b[i]);
int x_ = b[i] < n ? b[i] : n, y_ = b[i];
for (int j = N * N - 1; j >= 0; --j)
dp[i & 1][j] = dp[i & 1 ^ 1][j];
for (int j = N * N - 1; j >= x_; --j)
dp[i & 1][j] |= dp[i & 1 ^ 1][j - x_] << y_;
}
for (int h = 0; h + sum < N * N; ++h) {
for (int j = n * k; j < N * N; ++j) {
if (dp[m][j][sum + h]) {
printf("%d\n", h);
return 0;
}
}
}
puts("Impossible");
return 0;
}