40分求助
查看原帖
40分求助
1050483
zjr2014楼主2024/11/29 16:42
#include<bits/stdc++.h>
using namespace std;
int n,a[201],f[201][201],sum[201],num=INT_MAX;
void dfs(){
	for(int l=2;l<=n;l++){
		for(int i=1;i<=2*n-l+1;i++){
			int j=i+l-1;
			for(int k=i;k<=j-1;k++){
				f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
			}
			f[i][j]+=sum[j]-sum[i-1];
		}
	}
}
void bfs(){
	for(int l=2;l<=n;l++){
		for(int i=1;i<=2*n-l+1;i++){
			int j=i+l-1;
			for(int k=i;k<=j-1;k++){
				f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
			}
			f[i][j]+=sum[j]-sum[i-1];
		}
	}
}
int main(){
	cin>>n;
	memset(f,0x3f,sizeof f);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		a[i+n]=a[i];
		f[i][i]=0;
	}
	for(int i=1;i<=2*n-1;i++){
		sum[i]=sum[i-1]+a[i];
	}
	dfs();
	for(int i=1;i<=n;i++){
		num=min(num,f[i][i+n-1]);
	}
	cout<<num<<"\n";
	num=0;
	memset(f,0,sizeof f);
	bfs();
	for(int i=1;i<=n;i++){
		num=max(num,f[i][i+n-1]);
	}
	cout<<num;
	return 0;
}
2024/11/29 16:42
加载中...