社区讨论
我写了那么久的树形背包居然是假的
灌水区参与者 14已保存回复 16
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @lobjfljw
- 此快照首次捕获于
- 2023/10/29 21:59 2 年前
- 此快照最后确认于
- 2023/11/04 03:03 2 年前
CPP
for(int i = head[u]; i; i = nxt[i]) {
if(to[i] == fa)continue;
dfs(to[i], u);
sz[u] += sz[to[i]];
for(int j = sz[u]; j >= 0; j--) {
for(int k = 1; k <= min(j, sz[to[i]]); k++) {
dp[u][j] = max(dp[u][j], dp[u][j - k] + dp[to[i]][k]);
}
}
}
这样链的数据会卡成 。
正确的写法是:
CPPfor(int i = head[u]; i; i = nxt[i]) {
if(to[i] == fa)continue;
dfs(to[i], u);
for(int j = sz[u]; j >= 0; j--) {
for(int k = 1; k <= sz[to[i]]; k++) {
dp[u][j + k] = max(dp[u][j + k], dp[u][j] + dp[to[i]][k]);
}
}
sz[u] += sz[to[i]];
}
我感觉我学到现在看到的所有板子都是上面那种的(
回复
共 16 条回复,欢迎继续交流。
正在加载回复...