换硬币 - 完全背包计数问题(模板题)


Submit solution

Points: 160
Time limit: 1.0s
Memory limit: 40M

Author:
Problem type
Allowed languages
C, C++

🪙 换硬币 - 完全背包计数问题(模板题)

你有若干种面额的金币,每种金币的数量是无限的。请你计算:凑出总金额 m 的所有不同组合方案的数量

如果无法凑出该金额,输出 0。

组合的顺序无关。例如:1+2 和 2+1 被认为是同一种方案。


📥 输入格式

第一行输入两个整数 n 和 m,分别代表金币种类的数量和目标金额。
第二行输入 n 个正整数,表示每种金币的面额。


📤 输出格式

输出一个整数,表示组合方案总数。
由于数值过大结果请对 \(10^9+7\) 进行取模后输出


🧪 示例 1

输入:
3 5
1 2 5

输出:
4

解释

共有 4 种方法可以组成金额 5(顺序无关):

  • 1+1+1+1+1
  • 1+1+1+2
  • 1+2+2
  • 5

🧪 示例 2

输入:
1 3
2

输出:
0

🧪 示例 3

输入:
1 0
1

输出:
1

解释:金额为 0 的方案数是 1(即什么都不选)。


✅ 数据范围
  • \( 1 \le n \le 12 \)
  • \(1 \le coins[i] \le 2^{31} - 1 \)
  • \(0 \le m \le 10^4\)

Comments

There are no comments at the moment.