#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
int solve(int N, int M, int K, vi &A, vi &B){
int asum = accumulate(A.begin(),A.end(),0);
int bsum = accumulate(B.begin(),B.end(),0);
if(asum > bsum) return -1;
if(*min_element(A.begin(),A.end()) < K) return -1;
vi U(bsum+1,-1);
U[0] = 0;
for(int i = 0;i < M;i++){
for(int j = bsum - B[i];j >= 0;j--) if(U[j] != -1) U[j+B[i]] = max(U[j+B[i]], U[j] + min(N,B[i]));
}
auto itr = find_if(U.begin() + asum, U.end(),[&](int x){return x >= N*K;});
if(itr == U.end()) return -1;
return itr - U.begin() - asum;
}
int main(){
int N,M,K;
cin >> N >> M >> K;
vi A(N), B(M);
for(int i = 0;i < N;i++) cin >> A[i];
for(int i = 0;i < M;i++) cin >> B[i];
int ans = solve(N,M,K,A,B);
if(ans == -1) cout << "Impossible";
else cout << ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |