为什么我无法求最小值
查看原帖
为什么我无法求最小值
44072
dyzxjzx楼主2020/7/28 19:26
#include<iostream>
#include<cstring>
const int N = 11000;
using namespace std;
int dp1[N][N],dp2[N][N],n,a[N],s[N],ans=1000000000;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)a[i+n]=a[i];
	for(int i=1;i<=2*n-1;i++)s[i]=s[i-1]+a[i];
	for(int l=1;l<=n;l++)
	{
		for(int i=1,j=l+i-1;j<2*n;i++,j++)
		{
			dp1[i][j]=1000000000;
			for(int k=i;k<j;k++)
			{
				dp1[i][j]=min(dp1[i][j],dp1[i][k]+dp1[k+1][j]+s[j]-s[i-1]);
				dp2[i][j]=max(dp2[i][j],dp2[i][k]+dp2[k+1][j]+s[j]-s[i-1]);
			}
		}
	}
	for(int i=1;i<=n;i++){
		ans=min(ans,dp1[i][i+n-1]);
	}
	cout<<ans<<endl;
	ans=-1;
	for(int i=1;i<=n;i++){
		ans=max(ans,dp2[i][i+n-1]);
	}
	cout<<ans<<endl;
 } 
2020/7/28 19:26
加载中...