#include <bits/stdc++.h>
using namespace std;
const int MAX = 305, INF = 1e9;
int a[MAX], s[MAX], b[MAX], v[MAX], dp[2][MAX][MAX], n,m,k;
void solve(){
for(int i = 1; i <= n; i++)s[i] = s[i-1]+a[i];
for(int i = 1; i <= n; i++)
for(int v = 1; v <= 300; v++)dp[(m+1)%2][i][v] = INF;
for(int x = m; x >= 1; x--){
int j = x%2, nxt = (x+1)%2;
for(int i = 1; i <= n; i++)
for(int v = 1; v <= 300; v++){
dp[j][i][v] = dp[nxt][i][v];
int id = upper_bound(s+1,s+2+n, b[x] + s[i] - v)-s;
if(id > n)dp[j][i][v] = min(dp[j][i][v], b[x] - (s[n]-s[i]) - v );
else dp[j][i][v] = min(dp[j][i][v], dp[nxt][id][a[id] - (b[x] - (s[id-1]-s[i]) - v)] );
}
}
if(dp[1][1][a[1]] == INF)cout<<"Impossible\n";
else cout<<dp[1][1][a[1]]<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m>>k;
if(k == 1){solve(); return 0; }
for(int i = 1; i <= n; i++)cin>>a[i];
for(int i = 1; i <= m; i++)cin>>b[i];
int resp = INF;
for(int mask = 1; mask < (1<<m); mask++){
for(int i = 1; i <= m; i++)v[i-1] = b[i];
int l,r;
for(int i = 0; i < m; i++)
if(mask & (1<<i)){l = i; break;}
for(int i = m-1; i >= 0; i--)
if(mask & (1<<i)){r = i; break;}
int ans = 0;
for(int i = 1; i <= n; i++){
int x = a[i]-k;
if(l == r){ans = -1; break;}
int qtd = k;
for(int j = l; j <= r; j++)
if(mask & (1<<j)){
qtd--;
v[j]--;
}
if(qtd > 0){ans = -1; break;}
while(!((mask & (1<<l))) || v[l] == 0){
l++;
if(l > r){ans = -1; break;}
}
if(l > r) break;
while(!((mask & (1<<r))) || v[r] == 0){
r--;
if(l > r){ans = -1; break;}
}
if(l > r)break;
while(v[r] < x){
x -= v[r];
v[r] = 0;
while(!((mask & (1<<r))) || v[r] == 0){
r--;
if(l > r){ans = -1; break;}
}
if(l > r)break;
}
if(l > r)break;
v[r] -= x;
}
if(ans != -1){
int cur = 0;
for(int i = 0; i < m; i++)
if((mask & (1<<r)))cur += v[i];
resp = min(resp,cur);
}
}
if(resp == INF)cout<<"Impossible\n";
else cout<<resp<<"\n";
}
# | 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... |