玄关
  • 板块学术版
  • 楼主liuhaowen2011
  • 当前回复5
  • 已保存回复6
  • 发布时间2024/12/12 20:25
  • 上次更新2024/12/13 11:50:16
查看原帖
玄关
1082470
liuhaowen2011楼主2024/12/12 20:25

p1880

#include<bits/stdc++.h>
using namespace std;
int n;
int a[201]={0},dpmax[201][201],dpmin[201][201],h[201]={0};
int maxans=-999999999,minans=999999999;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		a[i+n]=a[i];
		h[i]=h[i-1]+a[i];
		for(int j=1;j<=n*2;j++){
			dpmax[i][j]=-999999999;
			dpmin[i][j]=999999999;
		}
		dpmax[i][i]=0;
		dpmin[i][i]=0;
	}
	for(int i=n+1;i<=2*n;i++){
		h[i]=h[i-1]+a[i];
		for(int j=1;j<=n*2;j++){
			dpmax[i][j]=-999999999;
			dpmin[i][j]=999999999;
		}
		dpmax[i][i]=0;
		dpmin[i][i]=0
	}
	for(int i=2;i<=n;i++){
		for(int j=1;j+i-1<=n*2;j++){  
			for(int l=j;l<i+j-1;l++){
				dpmax[j][j+i-1]=max(dpmax[j][j+i-1],dpmax[j][l]+dpmax[l+1][i+j-1]+h[j+i-1]-h[j-1]);
				dpmin[j][j+i-1]=min(dpmin[j][j+i-1],dpmin[j][l]+dpmin[l+1][i+j-1]+h[j+i-1]-h[j-1]);
			}
			maxans=max(maxans,dpmax[j][j+n-1]);
			minans=min(minans,dpmin[j][j+n-1]);
		}
	}
	printf("%d\n%d",minans,maxans);
	return 0;
}

数据样例过不了

2024/12/12 20:25
加载中...