为什么不对啊(求求求求助)
查看原帖
为什么不对啊(求求求求助)
235901
Always_Remember_It楼主2022/8/12 10:16
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define of(a,b,c) for(int a=b;a>=c;a--)
const int N=110;
const int MAXN=0x7f7f7f7f7f7f7f7f;
const int MINN=-MAXN;
int a[N];
int before_sum[N];
int dp_min[N][N];
int dp_max[N][N];
int before_init(int i,int j,int before_sum[]){
	int res=before_sum[j]-before_sum[i];
	return res;
}
inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	} 
	while(ch>='0'&&ch<='9'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*f;
}
signed main(){
	int n;
	n=read();
	fo(i,1,n){
		a[i]=read();
		a[i+n]=a[i];
	}
	int round_n=(n<<1)-1;
	fo(i,1,round_n){
		before_sum[i]=before_sum[i-1]+a[i];
	}
	int last_min=MAXN;
	int last_max=MINN;
	fo(i,2,n){
		int ans_j=round_n-i+2;
		fo(j,1,ans_j){
			int len=j+i-1;
			int minn=MAXN;
			int maxn=MINN;
			fo(k,j,len-1){
				int ans_min=dp_min[j][k]+dp_min[k+1][len];
				if(ans_min<minn){
					minn=ans_min;
				}
				if(dp_min[j][len]<minn){
					minn=dp_min[j][len];
				}
				int ans_max=dp_max[j][k]+dp_max[k+1][len];
				if(ans_max>maxn){
					maxn=ans_max;
				}
				if(dp_max[j][len]>maxn){
					maxn=dp_max[j][len];
				}
			}
			dp_min[j][len]=minn;
			dp_max[j][len]=maxn;
			int res=before_init(j-1,len,before_sum);
			dp_min[j][len]+=res;
			dp_max[j][len]+=res;
			if(dp_min[j][len]<last_min){
				last_min=dp_min[j][len];
			}
			if(dp_max[j][len]>last_max){
				last_max=dp_max[j][len]; 
			}
		} 
	}
	cout<<last_min<<endl;
	cout<<last_max<<endl;
	return 0;
}
2022/8/12 10:16
加载中...