#jpack. 2026暑假CSP-J模拟赛01-T3 程老师的登山补给
2026暑假CSP-J模拟赛01-T3 程老师的登山补给
时间限制:1000ms 内存限制:512MB
题目描述
程老师是一位热爱登山的信息学竞赛教练。每年暑假,他都会组织学生们去攀登附近的山峰。出发前,每个人都要在补给站里挑选装备塞进自己的登山包,让包里的每一件装备都在路上派上用场。
程老师的登山包有一个承重上限 公斤。补给站里一共有 件装备可供挑选,每件装备都有唯一的编号。第 件装备的重量为 公斤,价值为 ;价值越高的装备,对登山越有用。补给站里每件装备只有一件库存,所以对于同一件装备,要么带进包里,要么留下,不可能带两件。
装包有一条硬性要求:所有带进包里的装备,总重量必须恰好等于 公斤,既不能少也不能多。程老师解释说,背包若是没有装满,行走时里面的装备会互相碰撞晃动,不仅影响重心平衡,还可能震坏精密仪器;而一旦超过承重上限,背包的背带又承受不住。所以"恰好装满"是出发前必须满足的底线。
在满足"总重量恰好等于 "这个前提下,程老师希望带上的装备总价值尽可能大。他告诉学生们,如果补给站里根本找不出一组装备能把背包恰好装满,那就只好放弃这次登山。
现在程老师想请你帮他算清楚两件事:
- 在必须恰好装满背包的前提下,能够带上的装备总价值最大是多少;
- 一共有多少种不同的装法能达到这个最大总价值。
这里所说的"装法",指选择的具体装备编号集合。只要两套选法包含的装备编号不完全相同,即使选到的装备重量、价值完全一样,也视为两种不同的装法。
输入格式
从文件 pack.in 中读入数据。
第一行两个正整数 ,分别表示装备数量和背包承重上限。
接下来 行,每行两个正整数 ,分别表示第 件装备的重量和价值。
输出格式
输出到文件 pack.out 中。
- 若存在总重量恰好等于 的装法,第一行输出最大总价值,第二行输出达到该最大总价值的装法数量对 取模后的结果;
- 若不存在任何总重量恰好等于 的装法,只输出一行 。
数据范围
| 测试点编号 | 特殊性质 | ||
|---|---|---|---|
| 1 | 无 | ||
| 2 ~ 3 | A | ||
| 4 ~ 5 | 无 | ||
| 6 ~ 7 | |||
| 8 ~ 10 | |||
| 11 ~ 13 | |||
| 14 ~ 15 | B | ||
| 16 ~ 20 | 无 |
- 特殊性质 A:所有装备的重量相同。
- 特殊性质 B:所有装备的价值相同。
对于所有数据,,,,。
样例
样例 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 件(,价值 )和第 1、2、4 件(价值同样为 );装第 3、5 件(,价值 )和第 4、5 件(价值同样为 )。最大总价值为 20,达到 20 的装法有两种,所以第二行输出 2。
样例 3:装第 1、2 件(,价值 )和第 1、3 件(,价值 )都能恰好装满。最大总价值为 15,只有第 1、2 件这一种装法达到,所以第二行输出 1。
- ID
- 685
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: