Submission #211628

#TimeUsernameProblemLanguageResultExecution timeMemory
211628DS007Bali Sculptures (APIO15_sculpture)C++14
0 / 100
5 ms384 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2005; int n, a, b; int y[N], p[N]; int dp[N][N]; void compute(int i, int l, int r, int optl, int optr) { if (l > r) return; int mid = (l + r) / 2; pair<int, int> best = {1e18, -1}; for (int j = optl; j <= min (optr, mid - 1); j++) best = min(best, {dp[i - 1][j] | (p[mid] - p[j + 1] + y[j + 1]), j}); dp[i][mid] = best.first; compute(i, l, mid - 1, optl, best.second); compute(i, mid + 1, r, best.second, optr); } void solveTestCase() { cin >> n >> a >> b; for (int i = 0; i < n; i++) cin >> y[i]; p[0] = y[0]; for (int i = 1; i < n; i++) p[i] = p[i - 1] + y[i]; for (int i = 0; i < n; i++) dp[1][i] = p[i]; for (int i = 2; i <= n; i++) compute(i, 0, n - 1, 0, n - 1); int ans = 1e18; for (int i = a; i <= b; i++) ans = min(ans, dp[i][n - 1]); cout << ans; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int test = 1; //cin >> test; while (test--) solveTestCase(); }
#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...