能量项链
思路:
环形区间dp+矩阵连乘
代码:
#include <iostream>
#include <cstring>
//类似于矩阵连乘的一道题,将维度存下来一共有n+1个数字
using namespace std;
const int N = 205;
int f[N][N];
int a[N];
int n;
int main() {
cin>>n;
for(int i = 1;i<=n;i++) {
cin >> a[i];
a[n+i] = a[i];
}
for(int len = 3;len<=n+1;len++){
for(int l = 1;l+len-1<=n*2;l++){
int r = l+len-1;
for(int i = l+1;i<r;i++){
f[l][r] = max(f[l][r],f[l][i]+f[i][r]+a[l]*a[r]*a[i]);
}
}
}
int res = 0;
for(int i = 1;i<=n;i++){
res = max(res,f[i][n+i]);
}
cout<<res;
return 0;
}
这篇博客介绍了如何使用环形区间动态规划(dp)和矩阵连乘的思想来解决一个关于能量项链的问题。通过计算不同长度子序列的最优能量组合,最终找到整个项链中能量的最大值。
3316

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



