#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
using pibii = tuple<int,bool,int,int>;
#define endl '\n'
#define f first
#define s second
int const N = 305;
int dp[N][N*N];
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
memset(dp, -1,sizeof dp);
int n,m,k;cin >> n >> m >> k;
vector<int> stuf(n);
int tneed = 0;
int kneed = n*k;
for(auto &i:stuf){
cin >> i;
tneed += i;
if(i < k){
cout << "Impossible";
return 0;
}
}
int sum = 0;
dp[0][0] = 0;
for(int i = 1;i <= m;i++){
int g;cin >> g;
int mt = min(g,n);
sum += g;
for(int j = 0;j <= sum;j++){
if(dp[i-1][j] != -1) dp[i][j] = dp[i-1][j];
if(j >= g && dp[i-1][j-g] != -1) dp[i][j] = max(dp[i][j],dp[i-1][j-g]+mt);
//cout << dp[i][j] << " ";
}
//cout << endl;
}
int ans = 1e9+7;
for(int j = tneed;j <= sum;j++){
if(dp[m][j] >= kneed) ans = min(j-tneed,ans);
}
if(ans == 1e9+7){
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... |