Loading docs/dp/tree.md +4 −3 Original line number Diff line number Diff line Loading @@ -105,9 +105,10 @@ $$ f[u][1] = s[u]; for (auto v : e[u]) { int siz = dfs(v); for (int i = min(p, m + 1); i; i--) // 只考虑已经合并过的子树 for (int j = 1; j <= siz && i + j <= m + 1; j++) // 选的课程数超过 m+1 的状态没有意义 // 注意下面两重循环的上界和下界 // 只考虑已经合并过的子树,以及选的课程数超过 m+1 的状态没有意义 for (int i = min(p, m + 1); i; i--) for (int j = 1; j <= siz && i + j <= m + 1; j++) f[u][i + j] = max(f[u][i + j], f[u][i] + f[v][j]); p += siz; } Loading Loading
docs/dp/tree.md +4 −3 Original line number Diff line number Diff line Loading @@ -105,9 +105,10 @@ $$ f[u][1] = s[u]; for (auto v : e[u]) { int siz = dfs(v); for (int i = min(p, m + 1); i; i--) // 只考虑已经合并过的子树 for (int j = 1; j <= siz && i + j <= m + 1; j++) // 选的课程数超过 m+1 的状态没有意义 // 注意下面两重循环的上界和下界 // 只考虑已经合并过的子树,以及选的课程数超过 m+1 的状态没有意义 for (int i = min(p, m + 1); i; i--) for (int j = 1; j <= siz && i + j <= m + 1; j++) f[u][i + j] = max(f[u][i + j], f[u][i] + f[v][j]); p += siz; } Loading