40分WA#2,#3,#4求调
查看原帖
40分WA#2,#3,#4求调
1120498
NewbieZZZ楼主2024/8/2 15:32
#include <bits/stdc++.h>
using namespace std;
#define int long long

int dp[550][550], n, a[550], dp2[550][550], sum[550] = {0};

signed main(){
    cin >> n;
    memset(dp, 0x7f, sizeof dp);
    memset(dp2, 0, sizeof dp2);
    for(int i=1; i<=n; ++i){
        cin >> a[i];
        a[i + n] = a[i];
    }
    for(int i=1; i<n+n; ++i){
        sum[i] = sum[i-1] + a[i];
        dp[i][i] = dp2[i][i] = 0;
    }
    for(int len=2; len<=n; ++len){
        for(int i=1; i+len-1 < n+n; ++i){
            int j = i + len - 1;
            for(int k=i; k<j; ++k){
                dp2[i][j]=max(dp2[i][j], dp2[i][k] + dp2[k+1][j] + sum[j] - sum[i-1]);
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);
            }
        }
    }
    int ans = 2e9, ans2 = -1;
    for(int i=1; i<=n; ++i){
        ans = min(dp[i][i+n-1], ans);
        ans2 = max(dp2[i][i+n-1], ans);
    }
    cout << ans << '\n' << ans2;
    return 0;
}

2024/8/2 15:32
加载中...