区间DP求调
查看原帖
区间DP求调
620253
MvemiY楼主2022/11/28 10:53

0pts,WA#1#2#5,RE#3#4

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 110;
ll a[MAXN*2], s[MAXN*2], fax[MAXN][MAXN], fin[MAXN][MAXN], n;
int main(){
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i],
        a[i+n] = a[i];
    memset(fax, -1, sizeof(fax));
    memset(fin, 0x3f, sizeof(fin));
    for(int i = 1; i <= 2*n; i++)
        s[i] = s[i-1] + a[i],
        fax[i][i] = fin[i][i] = 0;
    for(int i = 1; i <= n; i++)
        for(int l = 1; l+i <= 2*n; l++){
            int r = l+i-1;
            for(int cut = l; cut < r; cut++){
                fax[l][r] = max(fax[l][r], fax[l][cut] + fax[cut+1][r] + (s[r] - s[l-1]));
                fax[l][r] = min(fax[l][r], fax[l][cut] + fax[cut+1][r] + (s[r] - s[l-1]));
            }
        }
    ll ansin = 0x3f3f3f3f, ansax = -1;
    for(int i = 1; i <= n; i++)
        ansin = min(ansin, fin[1][i+n-1]),
        ansax = max(ansax, fax[1][i+n-1]);
    cout << ansin << endl << ansax;
    return 0;
}

2022/11/28 10:53
加载中...