请给我代码:给定 nn 种货币,每种货币数量无限。 现在要求以最少的货币数目表示一个数 SS。 一种方法当然是 DP 求一个最优解了, 当然正常人的做法是贪心:每次取最大的不超过当前待表示数的货币。 现在,你的任务是证明正常人的表示法不一定最优:找到最小的 SS,使得正常人的表示法比理论最优解差,或说明这样的 SS 不存在
时间: 2023-02-10 21:51:42 浏览: 162
这是证明贪心策略的正确性的典型问题。
证明的思路是:假设存在一个数字 S,使得贪心策略无法得到最优解,并且有一组数字的选择方案使得贪心策略的结果比理论最优解差。
然后,我们可以通过反证法来证明这样的 S 不存在。
具体来说,我们可以考虑将 S 分解成若干个较小的数字,分别使用贪心策略和理论最优策略来解决这些较小的数字。然后,我们可以发现,贪心策略在处理这些较小的数字时也是最优的。所以,在处理 S 时,贪心策略仍然是最优的,这就与我们的假设矛盾。因此,证毕。
以下是用 Python 代码实现贪心策略的示例:
```
def greedy_strategy(S, denominations):
# 使用贪心策略表示数字 S
result = []
for coin in denominations:
while coin <= S:
S -= coin
result.append(coin)
return result
```
其中,`S` 表示要表示的数字,`denominations` 是货币的面额列表(按从大到小排列)。
阅读全文