Submission #721664

#TimeUsernameProblemLanguageResultExecution timeMemory
721664dxz05Uplifting Excursion (BOI22_vault)C++17
5 / 100
5034 ms4356 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(x) (x).begin(), (x).end() #define MP make_pair const int N = 100500; const int LIM = 100 * 100 * 101 / 2 + 1; vector<int> knapsack(vector<int> a){ vector<int> dp(LIM, -1e9); dp[0] = 0; for (int x : a) { for (int i = LIM - 1; i >= x; i--) { dp[i] = max(dp[i], dp[i - x] + 1); } } return dp; } void solve(){ int m; ll L; cin >> m >> L; if (L >= LIM || L <= -LIM){ cout << "impossible" << endl; return; } vector<int> pos, neg; for (int i = -m; i <= m; i++){ int x; cin >> x; while (x--){ if (i >= 0){ pos.push_back(i); } else { neg.push_back(-i); } } } vector<int> dp1 = knapsack(pos); vector<int> dp2 = knapsack(neg); if (L < 0){ L = -L; swap(dp1, dp2); } int ans = -1e9; for (int x = L; x < LIM; x++) { int y = x - L; ans = max(ans, dp1[x] + dp2[y]); } if (ans < 0) { cout << "impossible" << endl; } else { cout << ans << endl; } } int main() { ios_base::sync_with_stdio(false); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif solve(); return 0; }
#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...