Submission #849210

#TimeUsernameProblemLanguageResultExecution timeMemory
849210vjudge1Uplifting Excursion (BOI22_vault)C++17
5 / 100
5029 ms524288 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ll long long #define pii pair<int,int> #define F first #define S second #define endl '\n' #define pb push_back #define sz(a) (int)a.size() #define all(a) a.begin(),a.end() const int mod = 1e9 + 7; const ll inf = 1e18; int32_t main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n, l; cin >> n >> l; vector<int> a(2*n + 1); vector<int> b; for (int i=-n;i<=n;i++){ cin >> a[i+n]; int frq = a[i+n]; for (int j=0;j<frq;j++) b.pb(i); } int mx = 0, mn=0; for (auto it : b) (it >= 0 ? mx+=it : mn+=it); if (l > mx || l < mn) { cout << "impossible\n"; return 0; } int N = max(-mn ,mx)+2; int dp[N*2]={}; dp[N] = 1;// 0 for (int i=0;i<sz(b);i++){ if (b[i] >= 0){ for (int k=2*N-1;k>=b[i];k--){ if (dp[k-b[i]]) dp[k] = max(dp[k], dp[k-b[i]]+1); } } else { b[i] = -b[i]; for (int k=0;k+b[i]<2*N;k++){ if (dp[k+b[i]]) dp[k] = max(dp[k], dp[k+b[i]]+1); } } } if (dp[N+l]) cout << dp[N+l]-1 << endl; else cout << "impossible\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...