#6972. 礼品封装(gift)
礼品封装(gift)
礼品封装(gift)
题目描述
商店准备制作一批礼品包。
共有 (n) 件不同的礼品,第 (i) 件礼品的重量为 。
工作人员首先按照礼品重量从小到大排序。
如果重量相同,则按照输入中的先后顺序排列。
排序后,工作人员依次将相邻的两件礼品封装成一个礼品包:
- 第 1 件与第 2 件组成第 1 包;
- 第 3 件与第 4 件组成第 2 包;
- 以此类推。
如果 (n) 是奇数,那么最后剩余的一件礼品单独封装成一个礼品包。
封装完成后,礼品包不能拆开。每个礼品包最多只能选择一次。
每个礼品包的重量和价值,分别等于其中所有礼品的重量之和、价值之和。
现在有一个最大承重为 (V) 的运输箱。
请计算能够获得的最大礼品总价值。
输入格式
第一行包含两个整数 (n,V)。
接下来 (n) 行,每行包含两个整数。
输出格式
输出最大总价值。
输入输出样例 #1
输入
5 11
5 10
2 3
4 7
3 5
6 12
输出
20
样例解释
按重量排序后的礼品为:
(2,3)、(3,5)、(4,7)、(5,10)、(6,12)
其中每个括号表示 (重量,价值)。
封装后:
| 礼品包 | 总重量 | 总价值 |
|---|---|---|
| 第 1 包 | 5 | 8 |
| 第 2 包 | 9 | 17 |
| 第 3 包 | 6 | 12 |
选择第 1 包与第 3 包,总重量为 (5+6=11),总价值为 (8+12=20)。
数据范围
| 测试点编号 | 层级 | n |
V |
特殊性质 | 标准输出 | 设计目的 |
|---|---|---|---|---|---|---|
| 1 | 弱数据 | 1 | 单件礼品,恰好装入 | 7 | 检查最小规模及奇数尾包 | |
| 2 | 2 | 7 | 两件组成一包,包重量恰好等于容量 | 30 | 检查基本封装和容量边界 | |
| 3 | 3 | 5 | 输入乱序,存在单件尾包 | 13 | 检查重量排序、奇数件封装 | |
| 4 | 正常数据 | 4 | 所有礼品重量相同 | 120 | 检查同重量时按原编号配对 | |
| 5 | 5 | 3 | 所有礼品包均超过容量 | 0 | 检查无可选方案及零答案 | |
| 6 | 6 | 9 | 三个包存在组合取舍 | 30 | 防止使用贪心,验证 0/1 背包转移 | |
| 7 | 7 | 11 | 奇数件,尾部单件价值较高 | 140 | 检查尾包与其他包之间的最优选择 | |
| 8 | 6 | 总价值超过 32 位整数范围 | 6000000000 | 检查 long long dp 和大价值累加 |
||
| 9 | 10 | 20 | 输入乱序、重复重量、多包组合 | 100 | 综合检查排序、封装和容量组合 | |
| 10 | 极限数据 | 100 | 2000 | n 接近数组上限,倒序输入 |
9110 | 检查最大规模排序和背包循环性能 |
相关
在以下作业中: