#jpack. 2026暑假CSP-J模拟赛01-T3 程老师的登山补给

2026暑假CSP-J模拟赛01-T3 程老师的登山补给

时间限制:1000ms 内存限制:512MB

题目描述

程老师是一位热爱登山的信息学竞赛教练。每年暑假,他都会组织学生们去攀登附近的山峰。出发前,每个人都要在补给站里挑选装备塞进自己的登山包,让包里的每一件装备都在路上派上用场。

程老师的登山包有一个承重上限 WW 公斤。补给站里一共有 nn 件装备可供挑选,每件装备都有唯一的编号。第 ii 件装备的重量为 wiw_i 公斤,价值为 viv_i;价值越高的装备,对登山越有用。补给站里每件装备只有一件库存,所以对于同一件装备,要么带进包里,要么留下,不可能带两件。

装包有一条硬性要求:所有带进包里的装备,总重量必须恰好等于 WW 公斤,既不能少也不能多。程老师解释说,背包若是没有装满,行走时里面的装备会互相碰撞晃动,不仅影响重心平衡,还可能震坏精密仪器;而一旦超过承重上限,背包的背带又承受不住。所以"恰好装满"是出发前必须满足的底线。

在满足"总重量恰好等于 WW"这个前提下,程老师希望带上的装备总价值尽可能大。他告诉学生们,如果补给站里根本找不出一组装备能把背包恰好装满,那就只好放弃这次登山。

现在程老师想请你帮他算清楚两件事:

  1. 在必须恰好装满背包的前提下,能够带上的装备总价值最大是多少;
  2. 一共有多少种不同的装法能达到这个最大总价值。

这里所说的"装法",指选择的具体装备编号集合。只要两套选法包含的装备编号不完全相同,即使选到的装备重量、价值完全一样,也视为两种不同的装法。

输入格式

从文件 pack.in 中读入数据。

第一行两个正整数 n,Wn, W,分别表示装备数量和背包承重上限。

接下来 nn 行,每行两个正整数 wi,viw_i, v_i,分别表示第 ii 件装备的重量和价值。

输出格式

输出到文件 pack.out 中。

  • 若存在总重量恰好等于 WW 的装法,第一行输出最大总价值,第二行输出达到该最大总价值的装法数量对 109+710^9+7 取模后的结果;
  • 若不存在任何总重量恰好等于 WW 的装法,只输出一行 1-1

数据范围

测试点编号 nn WW 特殊性质
1 =1= 1 10\le 10
2 ~ 3 10\le 10 50\le 50 A
4 ~ 5 15\le 15 100\le 100
6 ~ 7 20\le 20 200\le 200
8 ~ 10 100\le 100 103\le 10^3
11 ~ 13 300\le 300 5×103\le 5 \times 10^3
14 ~ 15 500\le 500 104\le 10^4 B
16 ~ 20
  • 特殊性质 A:所有装备的重量相同。
  • 特殊性质 B:所有装备的价值相同。

对于所有数据,1n5001 \le n \le 5001W1041 \le W \le 10^41wi1031 \le w_i \le 10^31vi1061 \le v_i \le 10^6

样例

样例 1 输入

5 10
3 5
3 7
4 8
4 8
6 10

样例 1 输出

20
2

样例 2 输入

2 7
4 6
5 8

样例 2 输出

-1

样例 3 输入

3 10
6 10
4 5
4 4

样例 3 输出

15
1

样例解释

样例 1:恰好凑出 10 公斤的装法有四种:装第 1、2、3 件(3+3+4=103+3+4=10,价值 5+7+8=205+7+8=20)和第 1、2、4 件(价值同样为 5+7+8=205+7+8=20);装第 3、5 件(4+6=104+6=10,价值 8+10=188+10=18)和第 4、5 件(价值同样为 8+10=188+10=18)。最大总价值为 20,达到 20 的装法有两种,所以第二行输出 2。

样例 3:装第 1、2 件(6+4=106+4=10,价值 10+5=1510+5=15)和第 1、3 件(6+4=106+4=10,价值 10+4=1410+4=14)都能恰好装满。最大总价值为 15,只有第 1、2 件这一种装法达到,所以第二行输出 1。

难度 普及+/提高-
通过率 66.7%
尝试 3
已通过 2
ID
685
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者

相关

在下列比赛中:

暑假CSP-J模拟赛 第1场