1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int n; int a[205]; int dp[205][205]; // dp[i][j] a[i]~a[j]合并起来的最大能量值 int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; a[i + n] = a[i]; } int nn = n + n; a[nn + 1] = a[1]; for (int len = 1; len <= n; len++) { for (int l = 1; l + len - 1 <= nn; l++) { int r = l + len - 1; // 求 dp[l][r] if (len == 1) { dp[l][r] = 0; continue; } dp[l][r] = 0; for (int k = l; k <= r - 1; k++) { // 左 dp[l][k] a[l]~a[k]合并的对应的能量珠: a[l]开头 a[k+1]结尾 // 右 dp[k+1][r] a[k+1]~a[r]合并的对应的能量珠:a[k+1]开头 a[r+1]结尾 dp[l][r] = max(dp[l][r], dp[l][k] + dp[k + 1][r] + a[l] * a[k + 1] * a[r + 1]); } } } int ans = 0; for (int l = 1; l + n - 1 <= nn; l++) ans = max(ans, dp[l][l + n - 1]); cout << ans << "\n"; return 0; }
- 1
信息
- ID
- 800
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 46
- 已通过
- 25
- 上传者