求助,样例都过不了
查看原帖
求助,样例都过不了
939931
Addicted_Game楼主2023/12/5 19:52
#include<bits/stdc++.h>
using namespace std;
int n;
int a[205];
int bdp[205][205],sdp[205][205];//[i,j]极值 
int sum[205];
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	memset(sdp,0x3f,sizeof sdp); 
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		a[i+n]=a[i];
	}
	n*=2;
	for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];;
	for(int i=1;i<=n;i++) sdp[i][i]=0;
	for(int len=2;len<=n;len++){
		for(int i=1;i<=n-len+1;i++){
			int j=i+len-1;
			sdp[i][j]=0x3f3f3f3f;
			for(int k=i;k<j;k++){//有点像floyd 分割点 
				sdp[i][j]=min(sdp[i][j],sdp[i][k]+sdp[k+1][j]);
				bdp[i][j]=max(bdp[i][j],bdp[i][k]+bdp[k+1][j]);
			}
			sdp[i][j]+=sum[j]-sum[i-1];
			bdp[i][j]+=sum[j]-sum[i-1];
		}
	}
	int small=0x3f3f3f3f,big=-1;
	for(int i=1;i<=n;i++){
		small=min(small,sdp[i][i+n-1]);
		big=max(big,bdp[i][i+n-1]);
	}
	cout<<small<<"\n"<<big;
	return 0;
} 

最开始没有断环为链最小值大了1 化了后输出就奇怪的要死

2023/12/5 19:52
加载中...