题目
- 区间dp
- 枚举断点k,状态转移
- f[l][r] = max(f[l][r], f[l][k]+f[k][r] + a[l]*a[k]*a[r])
#include<bits/stdc++.h>
using namespace std;
int f[505][505];
int n, a[202];
int mian () {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
a[i+n] = a[i]; //环形
}
for (int i = 2; i <= n+1; i++) { //
for (int l = 1; l+i-1<= 2*n; l++) { //左端点
int r = l+i-1; //根据长度算出右端点
for (int k = l+1; k <= l+i-2; k++) { //断点
f[l][r] = max(f[l][r], f[l][k]+f[k][r] + a[l]*a[k]*a[r])
}
}
}
int res=0;
for (int i = 1; i <= n; i++) res = max(res,f[i][n+i]); //长度为n
cout << res;
return 0;
}
We become that we contemplate.