*【树形DP:树上背包】树形背包传统[LOJ160]
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
[AdditionalFile160.zip](file://AdditionalFile160.zip?type=additional_file)
题目描述
有 个物品,编号分别为 。物品 的重量为 ,价值为 。
给出每个物品依赖于哪个物品。我们用 表示:如果要选取物品 ,就必须先选取物品 。另外,我们用 表示:该物品不依赖于任何物品。保证每个物品最多只依赖一个物品。保证依赖关系合理,不会出现环。
背包最多能装载的重量为 ,请问背包中最多能装入多大价值的物品。
输入格式
输出格式
一个整数,表示答案
7 0
3 4 5 3 0 7 0
1 2 2 1 1 2 2
1 1 2 3 1 1 2
0
7 4
3 4 5 3 0 7 0
1 2 2 1 1 2 2
1 1 2 3 1 1 2
6
选择 3, 4, 5 号结点
10 6
0 1 1 1 2 3 4 5 6 7
1 1 2 2 3 1 2 2 3 1
0 1 1 1 1 1 1 1 1 1
3
选择 1, 2, 3, 6 号或 1, 2, 4, 7 号结点
13 3
0 1 1 1 3 3 0 0 8 9 10 8 10
1 1 1 1 1 1 1 1 1 1 1 1 1
2 16 32 512 2048 4096 4 1 8 64 1024 128 256
4130
13 25
0 1 1 1 3 3 0 0 8 9 10 8 10
5 6 4 3 7 5 4 7 3 6 5 6 6
0 2 1 2 3 3 3 0 1 2 4 3 2
10
数据范围与提示
- , , ;
- ;
- .
如果你感觉这里的二维数组很难定义,可以先开一个一维的
int数组,假设名字为pool;等到读入了 后再这样声明:int (*dp)[w+1] = decltype(dp)(pool);之后就可以写
dp[i][j]了(其中 )。