Submission #849206

#TimeUsernameProblemLanguageResultExecution timeMemory
849206vjudge1Uplifting Excursion (BOI22_vault)C++17
0 / 100
78 ms4700 KiB
#include<bits/stdc++.h> using namespace std; #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 int N = 1e6 + 15; const ll inf = 1e18; int dp[2*N]; int 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"; } 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...