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