제출 #612287

#제출 시각아이디문제언어결과실행 시간메모리
612287KrisjanisPUplifting Excursion (BOI22_vault)C++14
0 / 100
489 ms31080 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll M = 300; ll a[2*M+1]; ll m, l; bool dp_vis[M*2+1][2*200*M+1]; ll dp_res[M*2+1][2*200*M+1]; // returns max items that can be picked ll dp(ll v, ll sum) { if(v==m+1&&sum==0) return 0; if(v==m+1) return -1; if(dp_vis[v+m][sum+200*M]) return dp_res[v+m][sum+200*M]; dp_vis[v+m][sum+200*M] = 1; //cout<<v<<" "<<sum<<"\n"; ll res = -1; for(ll i=0;i<=a[v+m];i++) { ll r = dp(v+1,sum-(v*i)); if(r==-1) continue; res = max(res, r+i); } dp_res[v+m][sum+200*M] = res; return res; } int main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); cin>>m>>l; for(ll i=-m;i<=m;i++) cin>>a[i+m]; ll r = -1; if(l>=-M*100&&l<=M*100) r = dp(-m,l); if(r==-1) cout<<"impossible\n"; else cout<<r<<"\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...
#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...