algorithm - 如何解读这个换币算法

标签 algorithm greedy

我正试图为一个简单的问题找到一个直接的答案..在这里..

假设您在 d(1) = 1、d(2) = 7 和 d(3) = 10 的面额系统中有一个 n=10 的硬币找零算法。

现在从教科书中给出算法的实现..

Greedy_coin_change(denom, A)
{
    i = 1;
    While (A > 0) {
        c = A/denom[i];
print(“use “+c+”coins of denomination”+denom[i];
        A = A – C * denom[i];
        i = i+1;
    }
}

结果不会是:“使用 10 个面额为 1 的硬币”吗?

这当然是因为,根据我的理解,denom[1] = 1,denom[2] = 7,denom[3] = 10。对吗?

如果是这种情况,算法就不会被认为是最优的,对吗?

但是,代码上方有一个小声明,我不确定它是否应该作为代码的一部分,这里是:

denom[1] > denom[2] > ... > denom[n] = 1.

最佳答案

denom[1] > denom[2] > ... > denom[n] = 1.

意味着输入中的项目应该从大到小排序。

将其作为算法的前提条件(即这是算法工作所必需的)。

因此,如果给定 1,7,10denom 将是 {10,7,1} 并且它将选择 1 恶魔[1]

关于algorithm - 如何解读这个换币算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409968/

相关文章:

algorithm - RSA:使用扩展欧几里德算法计算私钥

algorithm - 如何有效地合并流中的 int 范围?

algorithm - 使用动态规划实现事件选择问题

algorithm - 如何找到最大生成树?

algorithm - Strange Bank(Atcoder初学者竞赛099)

javascript - 将点投影到路径上

algorithm - 随机数发生器的变化间隔

python - 在 python 中对正则表达式进行去贪婪处理

c - While 循环条件不满足

algorithm - 数组中给定数字的最小窗口