20求查
  • 板块学术版
  • 楼主zhw936_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/16 19:01
  • 上次更新2024/10/16 21:16:31
查看原帖
20求查
1419031
zhw936_楼主2024/10/16 19:01
#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 210;
int a[N],b[N],dp[N][N],dp2[N][N],minn=0x3f,maxx;
signed main(){
	int n;
	cin>>n;
//	int len = (n<<1)-1;
//	memset (dp,0x7f,sizeof(dp));
	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<=n+n;i++){
		b[i]=b[i-1]+a[i];
		dp[i][i]=0;
		dp2[i][i]=0;
	}
//	for(int i=1;i<=n+n-1;i++){
//		cout<<a[i]<<" ";
//	}
//	cout<<endl;
//	for(int i=1;i<=n+n-1;i++){
//		cout<<b[i]<<" ";
//	}
//	for(int len=2;len<=n;len++){
//		for(int i=1;i+len-1<=n+n;i++){
//			int j=i+len-1;
//			for(int k=i;k<j;k++){
//				dp[i][j]=min(dp[i][k]+dp[k+1][j]+b[j]-b[i-1],dp[i][j]);
//			}
//		}
//	}
	for(int len=2;len<=n;++len){
		for(int i=1;i+len-1<=n+n;++i){
			int j=i+len-1;
			dp[i][j]=0x3f;
			dp2[i][j]=-1;
			for(int k=i;k<j;++k){
				dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]);
				dp2[i][j]=max(dp2[i][j],dp2[i][k]+dp2[k+1][j]);
			}
			dp[i][j]+=(b[j]-b[i-1]);
			dp2[i][j]+=(b[j]-b[i-1]);
		}
	}
//	for(int i=1;i<=n+n-2;i++){
//		for(int j=1;j<=n+n-1;j++){
//			cout<<dp[i][j]<<" ";
//		}
//		cout<<endl;
//	}
	for(int i=1;i<=n;++i){
		minn=min(dp[i][i+n-1],minn);
		maxx=max(dp2[i][i+n-1],maxx);
	} 
	cout<<minn<<endl<<maxx;
}
2024/10/16 19:01
加载中...