# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1224145 | sleepntsheep | Kitchen (BOI19_kitchen) | C++17 | 0 ms | 0 KiB |
#include <stdio.h>
#include <bitset>
#include <algorithm>
#define N 405
int n, m, k, a[N], b[N], sum, ans = 1e9;
int dp[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;
}
}
memset(dp, 0xbf, sizeof dp);
dp[0] = 0;
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 >= y_; --j) {
dp[j] = std::max(dp[j], dp[j - y_] + x_);
}
}
for (int h = 0; h + sum < N * N; ++h) {
if (dp[sum + h] >= k * n) {
printf("%d\n", h);
return 0;
}
}
puts("Impossible");
return 0;
}