求问为什么最小值dp数组永远都是inf
查看原帖
求问为什么最小值dp数组永远都是inf
529247
BLX32M_10楼主2023/7/17 10:37

记搜代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int fmax[205][205], fmin[205][205], qzh[205];
int dp1(int l, int r)
{
	if (fmax[l][r])
		return fmax[l][r];
	for (int i = l; i < r; i++)
		fmax[l][r] = max(fmax[l][r], dp1(l, i) + dp1(i + 1, r) + qzh[r] - qzh[l - 1]);
	return fmax[l][r];
}
int dp2(int l, int r)
{
	if (fmin[l][r] != 0x3f3f3f3f)
		return fmin[l][r];
	for (int i = l; i < r; i++)
		fmin[l][r] = min(fmin[l][r], dp2(l, i) + dp2(i + 1, r) + qzh[r] - qzh[l - 1]);
	return fmin[l][r];
}
int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &qzh[i]);
		qzh[i] += qzh[i - 1];
	}
	for (int i = n + 1; i <= 2 * n; i++)
		qzh[i] = qzh[n] + qzh[i - n];
	memset(fmin, 0x3f, sizeof fmin);
	dp1(1, n * 2);
	dp2(1, n * 2);
	int amax = 0, amin = 0x3f3f3f3f;
	for (int i = 1; i <= n; i++)
	{
		amax = max(amax, fmax[i][n + i - 1]);
		amin = min(amin, fmin[i][n + i - 1]);
	}
	printf("%d\n%d", amin, amax);
	return 0;
}
2023/7/17 10:37
加载中...