题目
题意
给定一棵含 n n n 个节点的树,每个节点含一个点权 a [ i ] a[i] a[i]。现在请你选出一些节点,使得这些节点的权值和最大并且这些节点中任意两个节点的距离都 > k >k >k。并输出这个最大的权值。
思路
一道似乎有很多时间复杂度做法的题?因为数据规模开的实在是太小了,只有 200 200 200,所以 n 3 , n 2 , n n^3,n^2,n n3,n2,n 都可以过, n 4 n^4 n4 的卡卡也能过?对于很多算法,还没来得及研究,这里讲一种较为常规的 n 3 n^3 n3 的树形 d p \tt dp dp 的做法。
设 d p [ x ] [ d ] dp[x][d] dp[x][d] 为在以 x x x 为根的子树中,选择满足 k k k 距离限制的最大点集选取的答案,并且点集中深度最小的点深度 ≥ d ≥d ≥d。(这里的深度同样以 x x x 为根)
考虑转移:
- 若 d = = 0 d == 0