20分求调
查看原帖
20分求调
800013
WeaponA楼主2022/10/15 22:10

rt,

#include<bits/stdc++.h>
using namespace std;
inline int in()
{
    int x=0;char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}
    return x;
}
int a[205],mx[205][205],mn[205][205],s[205];
int main()
{
    memset(mn,0x3f,sizeof mn);
    int n=in();
    for(int i=1;i<=n;i++)a[i]=a[i+n]=in(),mx[i][i]=mn[i][i]=0;
    for(int i=1;i<=n*2;i++)s[i]=s[i-1]+a[i];
    for(int len=2;len<=n;len++)
    {
        for(int l=1;l<=n;l++)
        {
            int r=l+len-1;
            for(int k=l;k<r;k++)
            {
                mx[l][r]=max(mx[l][r],mx[l][k]+mx[k+1][r]+s[r]-s[l-1]),
                mn[l][r]=min(mn[l][r],mn[l][k]+mn[k+1][r]+s[r]-s[l-1]);
            }
        }
    }
    int ans1=0,ans2=INT_MAX;
    for(int i=1;i<=n;i++)
        ans1=max(ans1,mx[i][i+n-1]),
        ans2=min(ans2,mn[i][i+n-1]);
    printf("%d\n%d",ans2,ans1);
    return 0;
}

2022/10/15 22:10
加载中...