找零问题-动态规划算法

找零问题是指,给定一个需要找零的金额 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]=min⁡0≤j<mdj≤i(F[i−dj]+1)F[i]=0≤j<mdj​≤i​min​(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值