题目描述:
给定需要找零的面值m和可以使用的硬币种类n(假设每种硬币有无限多个),求出用这些硬币找零m所需要的最少硬币数。
输入描述:
第一行包含两个整数:m ,n,意义如题目描述。接下来的 n 行,每行一个整数,第 i + 1 行的整数表示第 i 种硬币的面值。
输出描述:
输出一个整数,表示最少需要携带的硬币数量。如果无解,则输出-1。
分析:
我们用 d(i) = j 来表示找零 i 元最少需要 j 个硬币。于是我们得到 d(0) = 0, 表示找零0元最少需要0个硬币。
当 i = 1 时,只有面值为1的硬币可用,有:
d(1) = d(1 - 1) + 1 = d(0) + 1 = 1
当 i = 2 时,可用硬币的面值是1、2,有:
d(2) = min{ d(2 - 1) + 1, d(2 - 2) + 1 } = min{ d(1) + 1, d(0) + 1 } = 1
当 i = 3 时,可用硬币的面值是1、2,有:
d(3) = min{ d(3 - 1) + 1, d(3 - 2) + 1 } = min{ d(2) + 1, d(1) + 1 } = 2
当 i = 4 时,可用硬币的面值是1、2,有:
d(4) = min{ d(4 - 1)