#6972. 礼品封装(gift)

礼品封装(gift)

礼品封装(gift)

题目描述

商店准备制作一批礼品包。

共有 (n) 件不同的礼品,第 (i) 件礼品的重量为 (wi),价值为(vi)(w_i),价值为 (v_i)。

工作人员首先按照礼品重量从小到大排序。

如果重量相同,则按照输入中的先后顺序排列。

排序后,工作人员依次将相邻的两件礼品封装成一个礼品包:

  • 第 1 件与第 2 件组成第 1 包;
  • 第 3 件与第 4 件组成第 2 包;
  • 以此类推。

如果 (n) 是奇数,那么最后剩余的一件礼品单独封装成一个礼品包。

封装完成后,礼品包不能拆开。每个礼品包最多只能选择一次。

每个礼品包的重量和价值,分别等于其中所有礼品的重量之和、价值之和。

现在有一个最大承重为 (V) 的运输箱。

请计算能够获得的最大礼品总价值。

输入格式

第一行包含两个整数 (n,V)。

接下来 (n) 行,每行包含两个整数(wi,vi) (w_i,v_i)。

输出格式

输出最大总价值。

输入输出样例 #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)。

数据范围

  • (1≤n≤100)(1\le n\le100)
  • (1≤V≤2000)(1\le V\le2000)
  • (1≤wi≤2000)(1\le w_i\le2000)
  • (1≤vi≤10000)(1\le v_i\le10000)

测试点编号 层级 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 检查最大规模排序和背包循环性能