Problem
【HNOI2007】梦幻岛宝珠
Description
给你N颗宝石,每颗宝石都有重量和价值。要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大,输出最大的总价值。
数据范围:,且保证每颗宝石的重量可以表示为的形式(其中)
Input
输入文件中包含多组数据。每组数据的格式如下:第一行是两个正整数和,,分别表示宝石的数目和最多能带走的宝石重量。接下来的行,每行有两个正整数和,,分别表示第i颗宝石的重量和价值,且保证能写成的形式。同一行的两个正整数之间用空格隔开。最后一组数据的后面有两个,表示文件的结束。这两个并不代表一组数据,你不需对这组数据输出结果。并且输入文件中数据的组数不超过。
Output
对于输入的每组数据,输出一个整数,表示小P最多能带走的宝石的总价值。每个结果整数单独占一行,且保证不会超过。
Sample Input
1 | 4 10 |
Sample Output
1 | 14 |
标签:分层DP
Solution
很大,不能直接搞。
而保证
因而可以按分层后背包。
分层后先层内DP出表示层级内容量为的最大价值。
然后层间DP求最大值:
详见代码。
Code
1 |
|