20分求调 自己感觉没问题
查看原帖
20分求调 自己感觉没问题
807667
JenF楼主2023/10/4 10:34
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,dp_max[220][220],dp_min[220][220],summ[220],a[220],ans=0,r,l;
int ans_max,ans_min;
signed main(){
	memset(dp_min,0x3f,sizeof(dp_min));
	memset(dp_max,0,sizeof(dp_max));
	cin>>n;
	summ[0]=0;
	for(int i=1;i<=n;++i){
		cin>>a[i];
		a[i+n]=a[i];
	}
	for(int i=1;i<=2*n;++i){
		summ[i]=summ[i-1]+a[i];
		dp_max[i][i]=dp_min[i][i]=0;
	}
	for(int i=2;i<=n;++i){//长度 
		for(int j=1;j<=2*n-i+1;++j){//起始点 
			int endd=i+j-1;
			for(int k=j;k<endd;++k){
				dp_max[j][endd]=max(dp_max[j][k]+dp_max[k+1][endd],dp_max[j][endd]);
				dp_min[j][endd]=min(dp_min[j][k]+dp_min[k+1][endd],dp_min[j][endd]);
			}
			dp_max[j][endd]+=(summ[endd]-summ[j-1]);
			dp_min[j][endd]+=(summ[endd]-summ[j-1]);
		}
	}
	ans_max=-1,ans_min=0x3f;
	for(int i=1;i<=n;++i){
		ans_max=max(ans_max,dp_max[i][i+n-1]);
		ans_min=min(ans_min,dp_min[i][i+n-1]);
	}
	cout<<ans_min<<endl<<ans_max;
	return 0;
}
2023/10/4 10:34
加载中...