20PTS,求助
查看原帖
20PTS,求助
867346
Fugeg楼主2023/3/5 22:29

最大值是对的,最小值有问题,为啥呀

#include<bits/stdc++.h>
using namespace std;
int n,ans=0x3f,ans1=-0x3f,a[105],s[105],dp[100][100],pd[100][100];
int main(){
	cin>>n;
	memset(dp,0x3f,sizeof(dp));
	memset(pd,-1,sizeof(pd));
	for(int i=1;i<=n;i++){	
		cin>>a[i];
		a[i+n]=a[i];
	}
	for(int i=1;i<=2*n;i++){
		s[i]=s[i-1]+a[i];
		dp[i][i]=0;
		pd[i][i]=0;
	}
	for(int len=2;len<=n;len++){
		for(int left=1;left+len-1<=2*n;left++){
			int right=left+len-1;
			for(int k=left;k<right;k++){
				dp[left][right]=min(dp[left][right],dp[left][k]+dp[k+1][right]+s[right]-s[left-1]);
				pd[left][right]=max(pd[left][right],pd[left][k]+pd[k+1][right]+s[right]-s[left-1]);
			}
		}
	}
	for(int i=1;i<=n;i++){
		ans=min(ans,dp[i][i+n-1]);
		ans1=max(ans1,pd[i][i+n-1]);
	}
	cout<<ans<<endl<<ans1;
	return 0;
}
2023/3/5 22:29
加载中...