大佬求助!!!60pts
查看原帖
大佬求助!!!60pts
482102
史蒂夫的憨憨楼主2023/6/10 14:36
#include<iostream>
using namespace std;
long long n,ans1,ans2;
long long a[105],b[105];
long long dp1[205][205],dp2[205][205];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],a[i+n]=a[i];
	for(int i=1;i<=2*n;i++) b[i]=b[i-1]+a[i];
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=2*n-i+1;j++)
		{
			for(int l=1;l<j+i-1;l++)
			{
				dp1[j][i+j-1]=max(dp1[j][i+j-1],dp1[j][l]+dp1[l+1][j+i-1]);
				if(dp2[j][i+j-1]) dp2[j][i+j-1]=min(dp2[j][i+j-1],dp2[j][l]+dp2[l+1][j+i-1]);
				else dp2[j][i+j-1]=dp1[j][l]+dp1[l+1][j+i-1];
			}
			dp1[j][i+j-1]+=b[i+j-1]-b[j-1];
			dp2[j][i+j-1]+=b[i+j-1]-b[j-1];
		}
	}
	ans1=dp1[1][n];
	ans2=dp2[1][n];
	for(int i=2;i<=n+1;i++)
	{
		ans1=max(ans1,dp1[i][i+n-1]);
		ans2=min(ans2,dp2[i][i+n-1]);
	}
	cout<<ans2<<endl<<ans1;
	return 0;
 } 
2023/6/10 14:36
加载中...