1 条题解
-
0
#include <bits/stdc++.h> #define int long long using namespace std; int n; int d[35]; int f[35][35]; int g[35][35]; void dfs(int l, int r) { if (l > r) return; int root = g[l][r]; cout << root << " "; dfs(l, root - 1); dfs(root + 1, r); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) cin >> d[i]; for (int len = 1; len <= n; len++) { for (int l = 1; l + len - 1 <= n; l++) { int r = l + len - 1; if (len == 1) { f[l][r] = d[l]; g[l][r] = l; continue; } for (int root = l; root <= r; root++) { if (root == l) { if (f[root + 1][r] + d[root] > f[l][r]) { f[l][r] = f[root + 1][r] + d[root]; g[l][r] = root; } } else if (root == r) { if (f[l][root - 1] + d[root] > f[l][r]) { f[l][r] = f[l][root - 1] + d[root]; g[l][r] = root; } } else { if (f[l][root - 1] * f[root + 1][r] + d[root] > f[l][r]) { f[l][r] = f[l][root - 1] * f[root + 1][r] + d[root]; g[l][r] = root; } } } } } cout << f[1][n] << "\n"; dfs(1, n); return 0; }
- 1
信息
- ID
- 1874
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 13
- 已通过
- 11
- 上传者