1 条题解
-
0
题意分析:
- 问题本质:给定一组硬币面值,计算支付1到100分所有金额所需的最小硬币数的平均值和最大值。
- 关键点:
- 支付和找零可以同时使用(即可以组合使用硬币)。
- 目标是找到每个金额的最少硬币数(支付或找零的组合)。
- 硬币面值按升序给出,第一个始终为1(保证解存在)。
解题思路:
-
动态规划(DP):
- 使用DP计算每个金额的最小硬币数。
- 状态定义:
dp[i]
表示金额i的最小硬币数。 - 状态转移:对于每个金额i,遍历所有硬币面值c,更新
dp[i] = min(dp[i], dp[i - c] + 1)
(如果i >= c)。 - 注意:需要同时考虑支付和找零的情况(即可以超过目标金额后找零)。
-
处理支付和找零:
- 对于每个目标金额
amount
(1到100),计算所有可能的支付金额pay
(pay >= amount
),找零为pay - amount
。 - 最小硬币数为
min_coins = min(dp[pay] + dp[pay - amount] for pay in [amount, ..., 100 + max_coin])
- 对于每个目标金额
-
计算平均和最大值:
- 对1到100的所有金额的最小硬币数求平均和最大值。
- 1
信息
- ID
- 253
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者