1 solutions

  • 0
    @ 2025-9-26 14:44:19
    ```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;
    }
    

    Information

    ID
    7055
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    67
    Accepted
    1
    Uploaded By