hiho一下第258周《EL SUENO》题目分析

1
0

本题是一道树形DP(递归)+背包的题目。

首先基本的思路是自底(叶子)向上(根)依次计算出刺杀每个目标需要的代价,不妨记为f[i]。

显然对于叶节点来说,由于不需要额外的信息,所以f[i]就等于该目标的Ci。

对于一个非叶子节点v,如何求f[v]呢?

由于我们是自底向上计算的,所以我们可以认为刺杀v的每个子节点的代价都已经求出了。不妨设是f[c1], f[c2] ... f[ck]。

现在我们的问题转化为:从c1 ... ck中选出若干个,使得这些节点的IP之和大于等于IN[v],并且代价之和最小。

这个子问题显然是一个变形的背包问题,我们可以用DP解决。

这样整个问题就解决了,总时间复杂度是O(N max{IN})的。

0 answer(s)

write answer 切换为英文 切换为中文


转发分享