1 条题解

  • 0
    @ 2025-5-6 11:33:21

    题意分析

    • 问题本质:给定一组硬币面值,计算支付1到100分所有金额所需的最小硬币数的平均值和最大值。
    • 关键点
      • 支付和找零可以同时使用(即可以组合使用硬币)。
      • 目标是找到每个金额的最少硬币数(支付或找零的组合)。
      • 硬币面值按升序给出,第一个始终为1(保证解存在)。

    解题思路

    1. 动态规划(DP)

      • 使用DP计算每个金额的最小硬币数。
      • 状态定义:dp[i]表示金额i的最小硬币数。
      • 状态转移:对于每个金额i,遍历所有硬币面值c,更新dp[i] = min(dp[i], dp[i - c] + 1)(如果i >= c)。
      • 注意:需要同时考虑支付和找零的情况(即可以超过目标金额后找零)。
    2. 处理支付和找零

      • 对于每个目标金额amount(1到100),计算所有可能的支付金额paypay >= amount),找零为pay - amount
      • 最小硬币数为 min_coins = min(dp[pay] + dp[pay - amount] for pay in [amount, ..., 100 + max_coin])
    3. 计算平均和最大值

      • 对1到100的所有金额的最小硬币数求平均和最大值。
    • 1

    信息

    ID
    253
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者