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

There are no comments at the moment.