【发布时间】:2008-11-19 16:07:41
【问题描述】:
您走进一家商店,选择了几种产品,然后去柜台结账。总数是一些(A)。你把手伸进钱包、钱包或口袋,放下一些现金 (P),其中P >= A,收银员会给你找零。
鉴于流通中的一组硬币和纸币,P 的最可能值是多少?
一些例子,假设可用的钞票是 5 美元、10 美元、20 美元、50 美元和 100 美元,可用的硬币是 5c、10c 和 25c:
A = $151.24P[1] = $160 (8x$20) 或 ($100 + 3x$20)P[2] = $155 ($100 + $50 + $5)
A = $22.65P[1] = $25 ($20 + $5)P[2] = $30 ($20 + $10)P[3] = $40 ($20 + $20)
A = $0.95P[1] = $1 (4 x 25c)P[2] = $5
其中许多数字看起来很直观,但我感觉算法很难确定。
【问题讨论】:
-
几年前我做了一个类似这样的小项目。但我不确定你的意思是我的“通常”。在我的项目中,我们想知道根据赌注和玩家数量兑现一组扑克玩家所需的最少纸币和硬币数量。
-
我同意“通常”会有所不同......当我携带现金时,我从不携带任何大于 20 的东西。我知道携带不小于 50 的人(所以他们不会买些琐碎的东西)。如果您正在寻找最少账单的场景,标准的贪心算法至少会以美元计算
-
是的,“通常”的要求会让这变得困难。
-
看起来正确的解决方案是贪婪算法和流通中票据的概率分布的组合。我赞成所有提到这些解决方案之一的答案,我选择了 Jim C 的答案,因为它暗示了两者。