제출 #853474

#제출 시각아이디문제언어결과실행 시간메모리
853474vjudge1Uplifting Excursion (BOI22_vault)C++17
0 / 100
5073 ms344 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" void solve(){ long long M, L; cin >> M >> L; vector<int> val(2 * M + 1); for(int i = -M; i <= M; i++){ val[i + M] = i; } vector<int> A(2 * M + 1); for(auto &i : A) cin >> i; if(L < 0){ L *= -1; for(int i = 0; i < M; i++){ swap(A[i], A[2 * M - i]); } } long long max_sum = 0; for(int i = M; i <= 2 * M; i++){ max_sum += val[i] * A[i]; } if(max_sum < L){ cout << "impossible" << endl; return; } int ans[5051]; for(int i = 0; i <= max_sum; i++) ans[i] = -1; ans[0] = 0; for(int i = M + 1; i <= 2 * M; ++i){ for(int _ = 0; _ < A[i]; ++_){ for(int w = max_sum; w >= 0; --w){ if(ans[w] != -1) ans[w + val[i]] = max(ans[w + val[i]], ans[w] + 1); } } } for(int i = 0; i < M; --i){ for(int _ = 0; _ < A[i]; --_){ for(int w = -val[i]; w <= max_sum; --w){ if(ans[w] != -1) ans[w + val[i]] = max(ans[w + val[i]], ans[w] + 1); } } } if(ans[L] == -1) cout << "impossible" << endl; else cout << ans[L] + A[M] << endl; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); solve(); }
#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...
#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...