You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
首先看清题意。题目要求的是在第一次操作前就要考虑是否对结点价值减半了,同时要求选择减半的结点不相邻。那么这里我陷入了思维误区,以为贪心求两种分类就够了(从0结点选择或不选择开始分成两类),其实很明显错误了,因为每个结点的价值不同,可能会出现选择减半的结点距离很远的情况。那这种就想到了337. House Robber III的思想,也就是树形DP。
2646. Minimize the Total Price of the Trips
好题。综合了很多思想。
首先看清题意。题目要求的是在第一次操作前就要考虑是否对结点价值减半了,同时要求选择减半的结点不相邻。那么这里我陷入了思维误区,以为贪心求两种分类就够了(从0结点选择或不选择开始分成两类),其实很明显错误了,因为每个结点的价值不同,可能会出现选择减半的结点距离很远的情况。那这种就想到了337. House Robber III的思想,也就是树形DP。
显然这种non-adjacent的题型都是用House Robber的DP思路。
又因为可以观察到对每个trip来说,路径都是固定的(因为是树),同时结点之间关联不大。所以接下来我们根据结点数量少的限制,可以对每个trip跑一遍DFS,记录路径经过的结点次数,最后汇总,DP计算总价值。
时间复杂度O(nm),其中m是trip长度;空间复杂度O(n)。
第二种方法是用Tarjan 离线 LCA + 树上差分,太难了看详解。
相关联的题目:
337. House Robber III
下面是我之前的做法,深度后序遍历,其中创建Map缓存防止重复子问题出现。
其中发现,每个结点最后的值只跟他的孩子结点有关,所以我们可以设计后序树形DP,这样省去了缓存。
相关资料
The text was updated successfully, but these errors were encountered: