社区讨论

区间动规输出 99 求调

P1063[NOIP 2006 提高组] 能量项链参与者 6已保存回复 7

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@mjdodk6d
此快照首次捕获于
2025/12/20 10:24
3 个月前
此快照最后确认于
2025/12/21 19:55
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2 * 1e3 + 5;
int n, ans, a[maxn], dp[maxn][maxn];
signed main()
{
    cin >> n;
    for (int i = 1; i <= n; ++ i)
    {
    	cin >> a[i];
    	if (i != n)
    	{
    		a[i + n] = a[i];
		}
	}
	memset(dp, -1, sizeof dp);
	for (int i = 0; i < maxn; ++ i)
	{
		dp[i][i] = 0;
	}
	for (int len = 2; len <= n; ++ len)
	{
		for (int i = 1; i + len < 2 * n; ++ i)
		{
			int l = i, r = i + l - 1;
			for (int j = l; j < r; ++ j)
			{
				int h = r + 1;
				if (h > n)
				{
					h = 1;
				}
				dp[l][r] = max(dp[l][r], dp[l][j] + dp[j + 1][r] + a[l] * a[j + 1] * a[h]);
			}
		}
	}
	for (int i = 1; i + n - 1 <= 2 * n; ++ i)
	{
		ans = max(ans, dp[i][i + n - 1]);
	}
	cout << ans;
	return 0;
}

回复

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

正在加载回复...