0/1 背包计数问题 —— 方案总数统计
Submit solution
Points:
100
Time limit:
1.0s
Memory limit:
400M
Author:
Problem type
Allowed languages
C, C++
🧙♂️ 魔法宝石的选择(0/1 背包计数)
你是一位魔法师,面前有 N 颗魔法宝石,每颗宝石有一个:
- 重量:w[i]
- 魔力值:v[i](本题不使用)
你需要从中选择若干颗宝石,放入一个魔法袋中,但魔法袋的最大承重为 W。
你的任务是:
计算恰好装满魔法袋(即总重量恰好为 W)的所有不同选择方案数。
- 如果无法恰好装满,请输出 0。
📌 输入格式
输入从标准输入读取,格式如下:
N W
w₁ v₁
w₂ v₂
...
wₙ vₙ
- N:宝石数量\((1 \le N \le 100)\)
- W:魔法袋容量\((1 \le W \le 10000)\)
- w[i]:第 i 颗宝石的重量\((1 \le w_i \le 100)\)
- v[i]:第 i 颗宝石的魔力值\((1 \le v_i \le 100)\)※ 本题可忽略此值
📤 输出格式
输出一个整数,表示恰好装满魔法袋的不同选择方案数。
📘 输入输出样例
示例 1
输入:
3 5
2 10
3 15
4 20
输出:
1
解释: 唯一可行方案是选择第1颗(重2)和第2颗(重3),总重量为 5。
示例 2
输入:
4 6
1 5
2 10
3 15
4 20
输出:
2
解释: 可行的三种组合为:
- 第1、2、3颗(1+2+3=6)
- 第2、4颗(2+4=6)
- 第1、4颗(1+4=5)❌(此方案无效,仅说明输入为 4 颗)
请按实际输入宝石进行组合判断。
🧠 提示
- 每颗宝石最多只能选择一次(0/1 背包)
- 魔力值 v[i] 不影响计数,仅用于题意描述
- 若答案较大,可输出对 \(10^9 + 7\) 取模的结果
Comments