#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
#define MAX 1111
const int MOD = 100000;
const int INF = 0x3f3f3f3f;
const double Pi = 3.1415926;
const double gap = 0.0000001;
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
typedef pair<int, int> Pair;
int dp[MAX][MAX];
int n;
int main(void)
{
int len = 0;
int l,r,k;
int i = 0;
int pos = 0;
int temp = 0;
vector<vector<int>> a = {{0,0}};
cin >> n;
for(i=1; i<=n; ++i)
{
cin >> temp;
a.push_back({temp, 0});
a[i-1][1] = a[i][0];
}
a[n][1] = a[1][0];
for(i=1; i<=n; ++i)
a.push_back(a[i]);
int ans = -INF;
for(len=2; len <=n; ++len)
for(l=1; l+len-1<=2*n; ++l)
{
r = l+len-1;
for(k=l; k<r; ++k)
dp[l][r] = max(dp[l][r], dp[l][k]+dp[k+1][r] + a[l][0]*a[k][1]*a[r][1]);
ans = max(dp[l][r], ans);
}
cout << ans <<endl;
return 0;
}
题目 1255: [蓝桥杯][算法提高]能量项链
最长路径三数之和:动态规划求最大乘积
最新推荐文章于 2025-11-30 20:35:27 发布
本文介绍了一种使用动态规划解决的题目,通过计算数组中三个数的组合,使得它们的和等于目标值,并求取最大乘积。代码展示了如何利用dp数组存储中间状态,最终找到最优解。
571

被折叠的 条评论
为什么被折叠?



