Submission #1166099

#TimeUsernameProblemLanguageResultExecution timeMemory
1166099fryingducKitchen (BOI19_kitchen)C++20
0 / 100
73 ms107848 KiB
#include "bits/stdc++.h"

using namespace std;

#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif

const int maxn = 305;
const int N = 9e4 + 6;
int n, m, k, a[maxn], b[maxn];
int f[maxn][N];

void solve() {
  cin >> n >> m >> k;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
  }
  int s = 0;
  for (int i = 1; i <= m; ++i) {
    cin >> b[i];
    s += b[i];
  }
  sort(b + 1, b + m + 1);
  int rm = 0;
  for (int i = 1; i <= n; ++i) {
    if (a[i] < k) {
      cout << "impossible";
      return;
    }
    rm += a[i];
  }
  memset(f, -0x3f, sizeof(f));
  f[0][0] = 0;
  for (int i = 1; i <= m; ++i) {
    for (int j = 0; j <= s; ++j) {
      f[i][j] = f[i - 1][j];
    }
    for (int j = b[i]; j <= s; ++j) {
      f[i][j] = max(f[i][j], f[i - 1][j - b[i]] + min(n, b[i]));
    }
  }
  for (int i = rm; i <= s; ++i) {
    if (f[m][i] >= n * k) {
      cout << i - rm;
      return;
    }
  }
  cout << "impossible";
}

signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  solve();

  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...