为啥爆0了,样例过了
查看原帖
为啥爆0了,样例过了
1412938
A7F3jK9pR0xf_楼主2024/8/6 21:20
#include <bits/stdc++.h>
using namespace std;
const int N = 210;
int a[N], dp[2][N][N], n, ans1, ans2 = 1e9;
int main()
{
	cin >> n;
	for(int i = 1;i <= n;++i)
	{
		scanf("%d", &a[i]);
		a[i+n] = a[i];
	}
	for(int i = 1;i <= n*2;++i) a[i] += a[i-1];
	for(int i = 1;i+n-1 <= n*2;++i)
	{
		memset(dp[0], 0x3f, sizeof(dp[0]));
		memset(dp[1], -0x3f, sizeof(dp[1]));
		for(int j = i;j <= i+n-1;++j)
			dp[0][j][j] = dp[1][j][j] = 0;
			
		for(int len = 2;len <= n;++len)
		{
			for(int l = i;l+len-1 <= i+n-1;++l)
			{
				int r = l+len-1;
				for(int k = l;k < r;++k)
				{
					dp[0][l][r] = min(dp[0][l][r], dp[0][l][k]+dp[0][k+1][r]+a[r]-a[l-1]);
					dp[1][l][r] = max(dp[1][l][r], dp[1][l][k]+dp[1][k+1][r]+a[r]-a[l-1]);
				}
			}
		}
		ans1 = max(ans1, dp[1][i][i+n-1]);
		ans2 = min(ans2, dp[0][i][i+n-1]);
	}
	cout << ans2 << " " << ans1;
	return 0;
}

2024/8/6 21:20
加载中...