← 完整题目索引

PROJECT EULER · #0328

最低代价搜索

Lowest-cost Search

仅题目 · 待解原题 ↗

我们试图通过提问来找到从整数集合 {1,2,,n} 中选出的隐藏数字。 我们询问的每个数字(问题)的成本等于所询问的数字,我们得到三个可能的答案之一:

  • "您的猜测低于隐藏的数字",或
  • "是的,就是这样!",或者
  • "您的猜测高于隐藏的数字"。

给定 n 的值,最佳策略可以最大限度地降低最坏情况的总成本(即所有问题的总和)。例如

如果n=3,我们能做的最好的显然就是询问数字"2"。答案将立即引导我们找到隐藏的数字(总成本 =2)。

如果 n=8,我们可能决定使用"二分搜索"类型的策略:我们的第一个问题是"4",如果隐藏数字高于 4,我们将需要一两个额外的问题。
让我们的第二个问题是"6"。如果隐藏数字仍然高于 6,我们将需要第三个问题来区分 78
因此,我们的第三个问题将是"7",这种最坏情况的总成本将为 4+6+7=17

通过询问"5"作为我们的第一个问题,我们可以大大改善 n=8 的最坏情况成本。
如果我们被告知隐藏数字高于 5,我们的第二个问题将是"7",那么我们就可以确定隐藏数字是什么(总成本为 5+7=12)。
如果我们被告知隐藏数字低于 5,我们的第二个问题将是"3",如果隐藏数字低于 3,我们的第三个问题将是"1",总成本为 5+3+1=9
由于 12>9,该策略的最坏情况成本为 12。这比我们之前使用"二分搜索"策略取得的效果要好;它也优于或等于任何其他策略。
所以,事实上,我们刚刚描述了 n=8 的最优策略。

C(n) 为通过 n 的最优策略实现的最坏情况成本,如上所述。
因此C(1)=0C(2)=1C(3)=2C(8)=12
同样,C(100)=400n=1100C(n)=17575

n=1200000C(n)

题解待补充

这道题的题目已收录,解题思路、代码和答案将在后续补充。