求助
查看原帖
求助
335094
Lucifero楼主2021/4/17 16:43
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int a[201],sum[201];
int f1[201][201],f2[201][201];
int n,minn(inf),maxn;
int main()
{
	//合并石子
	int l,r,mid,i,j;
	memset(f1,inf,sizeof(f1));
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		a[n+i]=a[i];
		f1[0][i]=f1[i][0]=f1[i][i]=0;
	}
	for(i=1;i<=n*2;i++) sum[i]=sum[i-1]+a[i];
	for(i=2;i<=n;i++)
		for(l=1;l<=n*2-i+1;l++)
		{
			r=i+l-1;
			for(mid=l;mid<r;mid++)
			{
				f1[l][r]=min(f1[l][r],f1[l][mid]+f1[mid+1][j]+sum[j]-sum[i-1]);
				f2[l][r]=max(f2[l][r],f2[l][mid]+f2[mid+1][j]+sum[j]-sum[i-1]);
			}
		}
	for(i=1;i<=n;i++)
	{
		minn=min(minn,f1[i][n+i-1]);
		maxn=max(maxn,f2[i][n+i-1]);
	}
	printf("%d\n%d",minn,maxn);
}
2021/4/17 16:43
加载中...