社区讨论
求助树上 dp 第二维枚举顺序
学术版参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo2dotdy
- 此快照首次捕获于
- 2023/10/23 12:09 2 年前
- 此快照最后确认于
- 2023/11/03 12:16 2 年前
树上 dp 典题:
有一棵 个点, 条边的树,每个节点有重量 和价值 ,背包重量为 ,求总重量不超过 的情况下,最大的价值。一个节点可以选,当且仅当它的父节点被选中。
写了一个 的暴力 dp,但是有个问题:
( 表示以 为根的子树中当前背包容量为 时的最大价值)。
CPPvoid dfs(int u, int fa) {
F(i,w[u],m) dp[u][i]=v[u];
forGraph(u){
int t=G[i].to;
if(t==fa) continue;
dfs(t,u);
for(int j=m; j>=w[u]; j--) { // here
for(int k=0; k<=j-w[u]; k++){
dp[u][j] = max(dp[u][j], dp[u][j-k]+dp[t][k]);
}
}
}
}
在
here 一行中,为什么背包的容量只能倒序枚举,而不能正序枚举。如需要完整代码见此。
如有解答请 @ 我,谢谢大家。
回复
共 5 条回复,欢迎继续交流。
正在加载回复...