U661996 疯狂的背包问题(14) - 有依赖的背包问题
题目背景
动态规划问题中的有依赖背包问题模板题,物品之间存在依赖关系。
题目描述
有 $N$ 个物品和一个容量为 $V$ 的背包。
物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点(若有)。
每个物品只有一件,每件物品的体积为 $v_i$,价值为 $w_i$。
求解将哪些物品装入背包,可使物品总体积不超过背包容量,且价值总和最大。输出最大价值。
输入格式
第一行有两个整数 $N$ 和 $V$,用空格隔开,分别表示物品个数和背包容积。
接下来有 $N$ 行,每行有三个整数 $v_i$、$w_i$、$p_i$,用空格隔开,分别表示第 $i$ 个物品的体积、价值和依赖关系。
* 如果 $p_i = -1$,表示该物品是根节点,没有依赖;
* 如果 $p_i > 0$,表示该物品依赖于第 $p_i$ 个物品,即如果要选择物品 $i$,则必须同时选择物品 $p_i$。
输出格式
输出一个整数,表示最大价值。
说明/提示
**样例 1 解释**:
物品1是根节点,物品2和3依赖于物品1,物品4和5依赖于物品2。
最优方案:选择物品1、物品2、物品4,总体积 = 3 + 2 + 5 = 10,总价值 = 5 + 3 + 8 = 16。
**数据范围**
* $1 \leq N \leq 100$
* $1 \leq V \leq 100$
* $1 \leq v_i, w_i \leq 100$
* $-1 \leq p_i \leq N$,且 $p_i \neq i$