社区讨论

求助

P1880[NOI1995] 石子合并参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m3r2n8tf
此快照首次捕获于
2024/11/21 16:49
去年
此快照最后确认于
2025/11/04 14:16
4 个月前
查看原帖
样例最大值过了,最小值没过
CPP
#include <bits/stdc++.h>
using namespace std;

int a[105], sa[105], dp1[105][105], dp2[105][105];

int main()
{
	int n;
	cin >> n;
	memset(dp1, 127 / 2, sizeof(dp1));
	for (int i = 1; i <= n; i++) cin >> a[i], sa[i] = sa[i - 1] + a[i], dp1[i][i] = 0;
	for (int i = n - 1; i >= 1; i--)
	{
		for (int j = i + 1; j <= n; j++)
		{
			for (int k = i; k <= j - 1; k++)
			{
				dp1[i][j] = min(dp1[i][j], dp1[i][k] + dp1[k + 1][j] + sa[j] - sa[i - 1]);
				dp2[i][j] = max(dp2[i][j], dp2[i][k] + dp2[k + 1][j] + sa[j] - sa[i - 1]);
			}
		}
	}
	cout << dp1[1][n] << endl << dp2[1][n] << endl;
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...