技能树

提交数: 34, 通过率: 0%, 平均分: 0

题目描述:

玩过 Diablo 的人对技能树一定是很熟悉的。一颗技能树的每个结点都是一项技能,要学会这项技能则需
要耗费一定的技能点数。只有在学会了某一项技能以后,才能继续学习它的后继技能。每项技能又有着不同的级
别,级别越高效果越好,而技能的升级也是需要耗费技能点数的。
有个玩家积攒了一定的技能点数,他想尽可能地利用这些技能点数来达到最好的效果,因此他给所有技能的
所有级别都打上了分,他认为效果越好的则分数越高。现在他要你帮忙寻找一个分配技能点数的方案,使得分数
总和最高。

输入格式:

第一行是一个整数 n1<=n<=20),表示所有不同技能的总数。接下来依次给出了这 n 个不同技能的详细
描述。每个技能描述共包括
5 行,第一行是该技能的名称,第二行是该技能在技能树中的父技能的名称,为空
则表示该技能不需要任何的先修技能便能学习。第三行是一个整数
L1<=L<=20),表示这项技能所拥有的最
高等级。第四行共有
L 个整数,其中第 i 个整数表示把这项技能从第 i-1 级升到第 i 级所需要的技能点数(0
级表示没有学习过)。第五行也包括了 L 个整数,其中第 i 个整数表示该玩家对这项技能的第 i 级的效果评分,
分数不超过
20。在技能描述之后是玩家所用角色的描述,共有两行。第一行是一个整数 P0<=P<=100),表
示目前所拥有的技能点数。接下来一行是
n 个整数,依次表示角色当前所习得的技能级别, 0 表示尚未学习。这
里不会出现非法的情况,譬如在没有学习某项技能的时候已经习得了它的后继技能。

输出格式:

只需包括一个整数 S,表示你的技能点最佳分配方案所得到的分数总和。

样例输入:

3
Freezing Arrow
Ice Arrow
3
3 3 3
15 4 6
Ice Arrow
Cold Arrow
2
4 3
10 17
Cold Arrow
3
3 3 2
15 5 2
10
0 0 1

样例输出:

42
时间限制: 1000ms
空间限制: 64MB