暗黑破坏神【题解】

Description

游戏的主人公有 n 个魔法,每个魔法分为若干个等级,第 i 个魔法有 p[i] 个等级(不包括 0),每个魔法的每个等级都有一个效果值,一个 j 级的 i 种魔法的效果值为 w[i][j],魔法升一级需要一本相应的魔法书,购买魔法书需要金币,第 i 个魔法的魔法书价格为 c[i],而小x只有 m 个金币(好孩子不用修改器)。

你的任务就是帮助小x决定如何购买魔法书才能使所有魔法的效果值之和最大,开始时所有魔法为 0 级效果值为 0。

Format

Input

第一行用空格隔开的两个整数 n,m。

以下 n 行,描述 n 个魔法,第 i + 1 行描述第 i 个魔法。格式如下:

c[i] p[i] w[i][1] w[i][2] … w[i][p[i]]

Output

第一行输出一个整数,即最大效果值。

以后 n 行输出你的方案:

第 i + 1 行有一个整数 v[i],表示你决定把第 i 个魔法学到 v[i] 级。

如果有多解输出花费金币最少的一组。

如果还多解输出任意一组。

Samples

输入数据 1
3 10
1 3 1 2 2
2 3 2 4 6
3 3 2 1 10
输出数据 1
11
1
0
3

Limitation

对于 100% 的数据,0 < n ≤ 100,0 < m ≤ 500,0 < p[i] ≤ 50,0 < c[i] ≤ 10,保证输入数据和最终结果在 longint 范围内。

浅浅谈一下

  • 首先看到题目,第一反应就是背包!
  • 仔细看下,没有无限选,就不是完全背包
  • 再仔细看下,每个魔法有 p i p_i pi等级,每个等级所花费的钱和收获的钱都不一样
  • 诶?怎么有点像多重背包有点小感觉
  • 于是,我们第一个生成的思路就出来了
  • 将每个魔法分成 p i p_i pi个物品,再做多重背包
  • 诶?等下,有点问题
  • 一个魔法可以选择多个等级吗?
  • 并不能!说明了什么?
  • 每个魔法分成的 p i p_i pi个物品互相排斥
  • 对于多组物品,每组物品互相排斥,只能挑一个,怎么做呢?
  • 分组背包应运而生!

分组背包

  1. 解决问题

有一个体积为 v v v的背包, n n n个物体,重量分别为 w 1 … … w n w_1……w_n w1wn,价值分别为 c 1 … … c n c_1……c_n c1c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值