#1522. 智能硬币找零机
智能硬币找零机
故事背景
在一家新开的超市里,老板安装了一台智能硬币找零机。这台机器需要根据顾客的购物金额和支付金额,计算出最少需要多少枚硬币来找零。作为超市的技术顾问,你需要为这台机器编写一个高效的找零算法。
题目描述
给定不同面额的硬币和一个总金额,编写一个函数来计算可以凑成总金额所需的最少硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
假设每种硬币的数量是无限的。
输入格式
第一行输入两个整数 n 和 amount ,分别表示硬币的种类数和需要找零的总金额。
第二行输入 n 个整数,表示每种硬币的面额。
输出格式
输出一个整数,表示最少需要的硬币个数。如果无法凑出总金额,输出 -1。
样例输入 1
3 11
1 2 5
样例输出 1
3
样例输入 2
2 3
2 5
样例输出 2
-1
样例输入 3
4 100
1 5 10 25
样例输出 3
4
提示
- 这是一个经典的贪心算法问题,但请注意,贪心算法并不总是能得到最优解
- 例如,当硬币面额为 [1, 3, 4],总金额为 6 时,贪心算法会选择 4+1+1(3枚),但最优解是 3+3(2枚)
- 但在本题中,我们假设硬币面额是合理的,贪心算法可以得到最优解