#6960. 零钱兑换(Coin Change)
零钱兑换(Coin Change)
零钱兑换(Coin Change)
**题目难度:**中等
题目描述
给定 (n) 种不同面额的硬币,以及一个整数 amount,表示需要凑出的金额。
每种面额的硬币都有无限枚。请计算凑出 amount 所需的最少硬币数量。
如果无法凑出该金额,输出 -1。
输入格式
第一行包含两个整数 (n) 和 amount,分别表示硬币面额的种类数和需要凑出的金额。
第二行包含 (n) 个整数,表示每种硬币的面额。
输出格式
输出一个整数,表示凑出 amount 所需的最少硬币数量。如果无法凑出,输出 -1。
数据范围
- (1 \le n \le 12)
- (1 \le \text{硬币面额} \le 2^{31}-1)
- (0 \le \text{amount} \le 10^4)
样例 1
输入
3 11
1 2 5
输出
3
说明
最少需要 3 枚硬币:(11=5+5+1)。
样例 2
输入
1 3
2
输出
-1
说明
只有面额为 2 的硬币,无法凑出金额 3。
样例 3
输入
1 0
1
输出
0
| 测试点编号 | 层级 | n |
amount |
特殊性质 | 标准输出 | 设计目的 |
|---|---|---|---|---|---|---|
| 1 | 弱数据 | 1 | 0 | 目标金额为 0 | 0 | 检查 dp[0] 初始化,无需使用硬币 |
| 2 | 边界数据 | 6 | 单一面额且无法凑出 | -1 | 检查不可达状态及无解输出 | |
| 3 | 弱数据 | 3 | 11 | 需要重复使用面额 | 3 | 检查完全背包正序转移和最少数量 |
| 4 | 正常数据 | 6 | 27 | 面额乱序、存在重复面额 | 检查输入顺序、重复面额及多方案比较 | |
| 5 | 极限数据 | 100 | 100000 | 多面额、大金额 | 101 | 覆盖较大的 DP 范围和多种状态转移 |
相关
在以下作业中: