1 条题解
-
0
#include <bits/stdc++.h> #define int long long using namespace std; int n; int l[41234], r[41234]; int a[41234], b[41234], c[41234]; int f[41234][55][55]; //到了 u,删了 x 条左、y 条 右 int dfs(int u, int x, int y) { if (u >= n) return c[u] * (a[u] + x) * (b[u] + y); if (f[u][x][y] != 0) return f[u][x][y]; f[u][x][y] = min(dfs(l[u], x, y) + dfs(r[u], x, y + 1), dfs(r[u], x, y) + dfs(l[u], x + 1, y)); return f[u][x][y]; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n - 1; i++) { cin >> l[i] >> r[i]; if (l[i] <= 0) l[i] = n - 1 - l[i]; if (r[i] <= 0) r[i] = n - 1 - r[i]; } for (int i = 1; i <= n; i++) cin >> a[n - 1 + i] >> b[n - 1 + i] >> c[n - 1 + i]; cout << dfs(1, 0, 0) << endl; return 0; }
- 1
信息
- ID
- 5139
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 4
- 标签
- 递交数
- 16
- 已通过
- 7
- 上传者