一、问题 给定一棵 n 个节点的无根带权树,要从中选出 K 个不同的点 A1,A2,...,AK ,最小化 ∑K−1i=1dist(Ai,Ai+1) 的值。 n≤3000,k≤n 。 dist(u,v) 为树上 u 到 v 的距离。 二、模型建立 可以把问题看作选出 K 个不同的点 A1,A2,...,AK ,然后从 A1 走到 A2 ,再走到 A3 ,…,最后走到 AK 的最小代价。 把原图视为有根树,然后树形DP。由于要选出 K 个点,所以考虑树形背包DP,定义 f[u][i] 表示在 u 的子树内选出 i 个点的最小代价,但是这样是没有正确性的。因为将两个子树合并时,有可能不断地在这两个子树内来回走。所以DP模型改为: f[u][i] :