40分,求调
查看原帖
40分,求调
1042158
0LCH0楼主2024/4/21 09:17
#include<bits/stdc++.h>
using namespace std;
int dp1[30][30],dp2[30][30],sum[1010],n,a[100],ans_min=0x3f3f3f3f,ans_max=0; 
inline int dfs1(int x, int y){
	if(dp1[x][y]) return dp1[x][y];
	if(x == y) return 0;
	int ans = 0;
	for(int i=x;i<=y - 1;i++) 
		ans = max(ans, dfs1(x, i) + dfs1(i + 1, y) + sum[y] - sum[x - 1]);
	return dp1[x][y] = ans;
}
inline int dfs2(int x, int y){
	if(dp2[x][y]) return dp2[x][y];
	if(x == y) return 0;
	int ans = 0x3f3f3f;
	for(int i=x;i<=y - 1;i++) 
		ans = min(ans, dfs2(x, i) + dfs2(i + 1, y) + sum[y] - sum[x - 1]);
	return dp2[x][y] = ans;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i];
		a[i+n]=a[i];
	}
	for(int i=1;i<=n*2;i++) 
	{
		sum[i]=sum[i-1]+a[i];
	}
	for(int i=1;i<=n;i++){
        ans_max=max(dfs1(i,i+n-1),ans_max);
		ans_min=min(dfs2(i,i+n-1),ans_min);
    }
    cout<<ans_min<<endl<<ans_max;
	return 0;
}
2024/4/21 09:17
加载中...