检查你树形dp的循环
for (int j = m; j >= 1; j--) {
for (int k = 0; k <= j; k++) {
f[u][j] = max(f[u][j], f[u][k] + f[v][j-k]);
}
}
for (int j = m; j >= 1; j--) {
for (int k = 1; k <= j; k++) {
f[u][j] = max(f[u][j], f[u][k] + f[v][j-k]);
}
}
其中 u 为当前节点,v 为当前节点的子节点
前者 WA 后者 AC
区别在于 k 能否取 0
若 k 取 0 意味着当前节点全部由子节点的状态转移而来,然而这是不可能的,因为至少要选到 a[u] 这个点