找零问题是指,给定一个需要找零的金额 nn,以及一组可用的硬币面值 d1,d2,...,dmd1,d2,...,dm,其中 d1<d2<...<dmd1<d2<...<dm,并且每个面值的硬币数量无限。目标是找出使用这些硬币面值组合成总金额 nn 时所需的最少硬币数目。
约束条件:
- 硬币面值为正整数。
- 找零金额必须完全等于给定的 nn。
- 每种面值的硬币可以被使用多次。
- 核心思想包括:
-
最优子结构: 如果一个问题的最优解包含其子问题的最优解,则该问题具有最优子结构性质。对于找零问题来说,如果要找零 nn 元,那么找到 n−din−di 的最优解后,再加一枚面值为 didi 的硬币,即构成 nn 的一个可能的最优解。
-
重叠子问题: 在求解过程中,会遇到相同的子问题多次出现。例如,在不同的阶段都可能需要计算相同金额的最小硬币数。动态规划利用备忘录或表格来存储已经计算过的子问题的结果,从而节省计算时间。
-
递推关系: 设 F[i]F[i] 表示总金额等于 ii 时所需最少的硬币数目,那么有如下递推公式:
F[i]=min0≤j<mdj≤i(F[i−dj]+1)F[i]=0≤j<mdj≤imin(F[i−dj]+1)
其中,djdj 是第 jj 种硬币的面值,且 F[0]=0F[0]=0,因为当金额为 0 时不需要任何硬币。
-
边界条件: 当总金额 ii 为 0 时,所需的最少硬币数目显然是 0,即 F[0]=0F[0]=0。
-
在找零问题中,如果输入的找零金额为6,且可用的硬币面值为{1, 3, 4},那么所需的最少硬币数目是多少?
- A) 2
- B) 3
- C) 4
- D) 5
正确答案:A
-
下列哪一项不是找零问题的约束条件?
- A) 硬币可以无限量使用。
- B) 必须使用所有给定面值的硬币。
- C) 找零金额必须完全等于给定的n。
- D) 硬币面值为正整数。
正确答案:B
-
动态规划解决找零问题时,时间复杂度是下列哪一个?
- A) O(n)
- B) O(nm)
- C) O(n^2)
- D) O(m^2)
正确答案:B