Submission #1131494

#TimeUsernameProblemLanguageResultExecution timeMemory
1131494SofiatpcKitchen (BOI19_kitchen)C++20
0 / 100
190 ms1152 KiB
#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 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...