Submission #584231

#TimeUsernameProblemLanguageResultExecution timeMemory
584231amunduzbaevKitchen (BOI19_kitchen)C++17
0 / 100
142 ms112748 KiB
#include "bits/stdc++.h" using namespace std; #define ar array typedef int64_t ll; //~ #define int ll const int N = 305; int a[N], b[N]; bitset<N * N> tp[N]; int dd[N][N * N]; int dp[N * N]; signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n, m, k; cin>>n>>m>>k; for(int i=0;i<n;i++){ cin>>a[i]; if(a[i] < k){ cout<<"impossible\n"; return 0; } } for(int i=0;i<m;i++){ cin>>b[i]; } int sum = accumulate(a, a + n, 0); sort(b, b + m); int l = m, tot = 0; dp[0] = 1; for(int i=0;i<m;i++){ if(b[i] > n) { l = i; break; } tot += b[i]; for(int j = tot;j >= b[i];j--){ dp[j] |= dp[j - b[i]]; } } tp[0][0] = 1; for(int i=l;i<m;i++){ int v = b[i] - n; for(int j=m-l;j>0;j--){ tp[j] |= (tp[j - 1] << v); } } for(int j=0;j<N;j++){ dd[j][N * N - 1] = 1e9; for(int k=N * N - 2;~k;k--){ if(tp[j][k]) dd[j][k] = k; else dd[j][k] = dd[j][k + 1]; } } int res = 1e9, c = 0; while(c <= m - l && sum >= 0){ for(int j=k * n;j<=tot;j++){ if(dp[j]){ res = min(res, j + dd[c][sum - j] - sum); } } //~ cout<<c<<" "<<res<<"\n"; sum -= n, c++; if(k) k--; } if(res == 1e9) cout<<"impossible\n"; else cout<<res<<"\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...