#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枚)
  • 但在本题中,我们假设硬币面额是合理的,贪心算法可以得到最优解