The more, The Better
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1230 Accepted Submission(s): 622
Problem Description
ACboy 很喜欢玩一种战略游戏,在一个地图上,有 N 座城堡,每座城堡都有一定的宝物,在每次游戏中 ACboy 允许攻克 M 个城堡并获得里面的宝物。但由于地理位置原 因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮 ACboy 算出要获得尽量多的宝物应该攻克哪 M 个城堡吗?
Input
每 个测试实例首先包括2 个整数, N,M.(1 <= M <= N <= 200); 在接下来的 N 行里,每行包括 2 个整数, a,b. 在第 i 行, a 代表要攻克第 i 个城堡必须先攻克第 a 个城堡,如果 a = 0 则代表可以直接攻克第 i 个城堡。 b 代表第 i 个城堡的宝物数量 , b >= 0 。当 N = 0, M = 0 输入结束。
Output
对于每个测试实例,输出一个整数,代表ACboy 攻克 M 个城堡所获得的最多宝物的数量。
Sample Input
3 2
0 1
0 2
0 3
7 4
2 2
0 1
0 4
2 1
7 1
7 6
2 2
0 0
Sample Output
5
13
Author
8600
Source
HDU 2006-12 Programming Contest
Recommend
LL
我真想说一句……树形DP ,你是我大爷!!!
表示这题比较简单,写了个超级难看的类似背包的玩意过去的……
dp[i][j]表示节点 i 花了 j 步在以 i 为根节点的子树中取的宝物的最大值。
所以就跟背包一样直接搞了……
代码如下: