1 solutions
-
0
```C++ #include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = (ll)4e18; ll calculate(const vector<int>& slices) { int N = slices.size(); int need = (N + 1) / 3; if (need == 0) return 0; vector<vector<ll>> dp(N, vector<ll>(need + 1, INF)); for (int i = 0; i < N; ++i) dp[i][0] = 0; dp[0][1] = slices[0]; if (N > 1) dp[1][1] = min<ll>(slices[0], slices[1]); for (int i = 2; i < N; ++i) { for (int j = 1; j <= need; ++j) { ll not_take = dp[i - 1][j]; ll take = (dp[i - 2][j - 1] == INF) ? INF : dp[i - 2][j - 1] + slices[i]; dp[i][j] = min(not_take, take); } } return dp[N - 1][need]; } ll minSizeSlices(vector<int>& slices) { int N = slices.size(); if (N == 0) return 0; if (N == 1) return slices[0]; vector<int> v1(slices.begin() + 1, slices.end()); vector<int> v2(slices.begin(), slices.end() - 1); ll a = calculate(v1); ll b = calculate(v2); return min(a, b); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; if (!(cin >> n)) return 0; vector<int> slices(n); for (int i = 0; i < n; ++i) cin >> slices[i]; cout << minSizeSlices(slices) << "\n"; return 0; }
- 1
Information
- ID
- 7055
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 67
- Accepted
- 1
- Uploaded By