石子合并

#include <bits/stdc++.h>
using namespace std;
const int N=505;
int a[N];
int sum[N];
int fmx[N][N];//区间l~r的最大得分
int fmn[N][N];//区间l~r的最小得分
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) { scanf("%d",&a[i]); a[n+i]=a[i]; }
    for(int i=1;i<=2*n;i++) sum[i]+=sum[i-1]+a[i];
    for(int len=2;len<=2*n;len++)
    {
        for(int l=1;l<=2*n-len+1;l++)
        {
            int r=len+l-1;fmn[l][r]=1e9+4;
            for(int k=l;k<r;k++)//合并l~k,k+1~r
            {

                fmx[l][r]=max(fmx[l][r],fmx[l][k]+fmx[k+1][r]+sum[r]-sum[l-1]);
                fmn[l][r]=min(fmn[l][r],fmn[l][k]+fmn[k+1][r]+sum[r]-sum[l-1]);
            }
        }
    }
    int ans1=1e9+4,ans2=0;
    for(int i=1;i<=n;i++)
    {
        ans1=min(ans1,fmn[i][i+n-1]);
        ans2=max(ans2,fmx[i][i+n-1]);
    }
    printf("%d\n%d\n",ans1,ans2);
    return 0;
}
lpt的小屋 文章被收录于专栏

我想要一份甜甜的爱情

全部评论

相关推荐

06-18 08:36
湖南大学 Java
运营你豪哥:没啥拷打的 1.增加量化结果,现在有点缺效果数据 2.突出复杂性,现在的项目描述有点像功能清单,强调一下技术难点和解决方案。
不给转正的实习,你还去吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-23 18:25
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务