考虑著名找零问题的一般情形:需找零金额为n,最少要用多少面值为d1<d2<…<dm的硬币? 【输入形式】 第一行一个整数n( n ≤ 10000 ),表示需找零的金额。 第二行一个整数m( m ≤ 100 ),表示硬币面值的个数。 第三行为m个整数,表示m个硬币的面值d1<d2<…<dm,其中d1=1。 【输出形式】 找零所需的数量最少的硬币数目。
时间: 2024-04-21 14:25:36 浏览: 81
最少硬币找零算法
好的,根据您的要求,我已经了解了您的问题。对于这个问题,我们可以使用动态规划来解决。
具体来说,我们定义一个数组 dp,其中 dp[i] 表示找零 i 元所需的最少硬币数目。显然,dp[0] = 0,因为找零 0 元不需要任何硬币。我们可以使用如下的状态转移方程来更新 dp 数组:
dp[i] = min(dp[i - d[j]] + 1),其中 d[j] 表示第 j 种硬币的面值,满足 d[j] ≤ i。
也就是说,我们枚举所有的硬币面值 d[j],然后用 dp[i - d[j]] + 1 来更新 dp[i]。这个式子的意思是,我们可以用一枚面值为 d[j] 的硬币来找零 i 元,然后再用 dp[i - d[j]] 个硬币来找零剩余的部分。因此,总共需要的硬币数目就是 dp[i - d[j]] + 1。
最终的答案就是 dp[n]。下面是具体的代码实现:
阅读全文