边界处理求助
查看原帖
边界处理求助
1072433
oneday001楼主2023/11/9 19:54
using namespace std;
int head[205], tail[205], f[205][205] = { 0 };
int main()
{
	int ans = 0, n, i, t, j, k;
	cin >> n;
	for (i = 1; i <= n; i++)
	{
		cin >> head[i];
		head[i + n] = head[i];
	}
	for (i = 1; i <= 2 * n - 1; i++) tail[i] = head[i + 1];
	tail[2 * n] = head[1];

	for (i = 1; i <= 2 * n - 1; i++) f[i][i] = 0;//想知道这里为什么i不是遍历到2*n

	for (t = 1; t <= n - 1; t++)//这里t区间长度吗,为什么不从2开始然后遍历到n
	{
		for (i = 1; i <= 2 * n - t; i++)//这里i是起始点 为什么不是i+t-1<2*n;
		{
			j = i + t;
			for (k = i; k <= j - 1; k++)
			{
				f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + head[i] * tail[k] * tail[j]);
			}
		}
	}
	for (i = 1; i <= n; i++) ans = max(ans, f[i][i + n - 1]);
	cout << ans << endl;
	return 0;
}
2023/11/9 19:54
加载中...