2004 年 8 月谜题解答

1. 如果没有额外的假设,Harout 永远不会使用 Jack。 无论金币数量多么庞大,情况都是如此。 为了理解原因,请考虑以下归纳论证。

从热身题中,我们知道 Harout 不会用 Jack 运送他最后的一枚、两枚、三枚或四枚金币。 假设 Harout 不会用 Jack 运送他最后的 k 枚或更少金币,但会运送 k+1 枚金币。 送一枚金币毫无意义,因为无论如何 Jack 都会拿走它。 送出全部 k+1 枚金币也不会给 Jack 诚实的动机。

因此,假设 Harout 发送了介于两者之间的某个数量 m:1 < m < k+1。 Harout 可以想象 Jack 这样推理:“即使我诚实,Harout 下次也会使用保险承运人,因为剩余的数量将少于 k。 所以我不如偷走这 m 枚金币。”


支持科学新闻报道

如果您喜欢这篇文章,请考虑通过以下方式支持我们屡获殊荣的新闻报道: 订阅。 通过购买订阅,您正在帮助确保关于塑造我们当今世界的发现和想法的具有影响力的故事的未来。


2. 对于信任直到被欺骗协议下的 10 枚金币,Harout 将准备大小分别为 4、3、2 和 1 的包裹。 假设 Jack 每次都诚实,Harout 将看到 6 枚金币运到苏黎世,其中 4 枚给了走私者。 在任何时候欺骗都不符合 Jack 的利益,因为这样做他永远不会得到超过 4 枚金币。

3. 对于 20 枚金币,Harout 将设置大小分别为 5、5、4、3、2 和 1 的批次。 如果走私者诚实,他将收到 6 枚金币,在任何其他情况下都不会收到更多。

4. 对于 50 枚金币,Harout 将设置大小分别为 5、9、8、7、6、5、4、3、2 和 1 的批次。 走私者 Jack 将获得其中的 10 枚金币。 不诚实对他没有帮助。

5. 假设 Jack 宁愿不诚实(当利润相等时)以便报复 Harout,并且 Harout 知道这一点。 对于 10 枚金币,批次应包含 3、3、2 和 2。 Harout 将有 5 枚金币运到苏黎世,而 Jack 将获得 5 枚。 对于 20 枚金币,批次将包含 4、5、4、3、2 和 2。 走私者将获得 7 枚,而 Harout 将有 13 枚运送到苏黎世。 对于 50 枚金币,批次将包含 4、9、8、7、6、5、4、3、2 和 2。 走私者将收到 11 枚,而 39 枚将运送到苏黎世。

以下是如何计算 Jack 倾向于诚实时的批次大小。(我有一种涉及动态规划的复杂方法,但威尔士格温特的 Peter Carpenter 向我展示了一种更优雅的方法。)Harout 发送的最后一批应该只有一枚金币。 如果他在最后发送更多金币,Jack 肯定会偷走它们。 倒数第二批应该有 2 枚,然后是 3 枚,依此类推。 这告诉我们,如果 Harout 最初的金币收藏数量为 1 枚、3 枚、6 枚、10 枚、15 枚、21 枚、28 枚、36 枚……金币,应该发送多少。

这些“完美金币数”源自序列 1、1+2、1+2+3、1+2+3+4、……。 如果 Harout 最初有 1+2+3+...+n 枚金币,那么他将它们分成大小分别为 nn-1、n-2、... 和 1 的批次,并按降序发送。 如果 Harout 最初的金币收藏不是一个完美的数字,那么他的第一批就是将他的收藏数量减少到下一个较低的完美金币数的数量。 例如,如果他有 31 枚金币,他的第一批将包含 3 枚金币(将剩余数量减少到 28,即 1+2+3+...+7)。

如果 Jack 在利润相等时倾向于不诚实,那么论证就会变得更加复杂。 下面我概述了一个依赖于称为动态规划和递归的技术的解决方案。 如果您觉得太难理解,那么您可以按照谜题爱好者 Peter Carpenter 的方法获得非常接近的结果: 给定 n 枚金币,根据 Jack 是好人的模型为 n-1 枚金币划分批次,然后在最后发送 1 枚金币。 以下方法略好一些

设函数 Merchant(n) = 如果走私者到那时为止一直诚实,并且商人采取最优策略,则商人将从最后的 n 枚金币中保留的数量。

函数 Smuggler(n) = 假设商人遵循商人的最优策略,走私者将从最后的 n 枚金币中获得的数量。

函数 Try(n,k) 确定当从剩余的 n 枚金币中发送 k 枚时会发生什么。 如果走私者从偷窃 k 枚金币中获得的收益至少与收取 1 枚佣金加上走私者从商人针对 n-k 的策略中获得的收益一样多,那么走私者就会偷窃。 否则他不会。

我们可以这样定义 Try(n,k) 的值
如果 k >= [1 + Smuggler(n-k)],那么走私者会偷窃 k 枚金币。 商人将比他已经收到的多运送 (n-k)/2 枚金币到苏黎世,并且走私者除了他作为佣金收到的之外,还将收到他偷窃的 k 枚金币。

否则,走私者不会偷窃。 然后,商人将在本次行程中运送 k-1 枚金币,加上 Merchant(n-k) 的值。 走私者将从本次行程中获得 1 枚金币,加上 Smuggler(n-k) 的值。

我们可以设置 Merchant(0) = 0 和 Smuggler(0) = 0,以及 Merchant(1) = 0 和 Smuggler(1) = 1(因为如果 Jack 到那时为止一直诚实,Harout 将用 Jack 运送他的最后一枚金币)。

然后我们可以从那里向上构建。 假设我们已经计算了 Merchant 和 Smuggler 对直到 n-1 的输入的计算结果。 为了弄清楚当商人有 n 枚金币并且走私者到那时为止一直诚实时,商人应该怎么做,假设商人评估了从 1 到 n-1 的每个 k 的 Try(n,k)。 然后商人选择对他最有利的 k 值,并将其选为他的下一批。

这种推理会产生最佳的批次划分。 例如,如果最初有 12 枚金币,批次将为 4、3、2、2、1。 Jack 将运送 4 枚、3 枚和前 2 枚,但不会运送第二个 2 枚,因此 Harout 将通过保险承运人发送最后的值。

© . All rights reserved.