【问题标题】:Costly Phone Number problem <coudnt figure out a solution using graphs>昂贵的电话号码问题
【发布时间】:2021-07-15 11:52:13
【问题描述】:

问题: 键盘有 11 个按钮,对应从 0 到 9 的数字,还有一个称为 Add 的按钮。按下 0 到 9 中的任意一个按钮后,屏幕上会出现相应的数字。添加按钮将屏幕上显示的最后两位数字替换为取模 10 的总和。(请参阅示例测试以获得更清晰的信息)。如果当前屏幕上的数字少于两位,则按添加不会执行任何操作。

每个按钮都有与之相关的非负按下成本。按下“添加”按钮的成本始终为 0。给定按下每个按钮和目标电话号码的成本,找出使用一系列按钮按下将该号码输入电话屏幕的最小成本。

https://www.hackerearth.com/practice/algorithms/graphs/shortest-path-algorithms/practice-problems/algorithm/costly-phone-number-december-easy-easy-medium/ 这是我的方法, 我已将数字 0 到 9 视为节点,将边视为键入数字的成本,但我们还必须考虑取决于您之前输入的 2 个数字的特殊边,我已尝试跟踪最后访问的两个边缘和修改 Dijkstra 的算法,但无法用这种方法取得任何进展,我被卡住了,有什么建议吗??

社论中的代码只是使用嵌套的 for 循环来获得输入数字的最佳成本,然后将它们相加,但我想找到一种使用图表的方法

【问题讨论】:

  • 添加您现有的方法/代码,以及您遇到的问题
  • 抱歉,我添加了有关我尝试过的方法的详细信息。

标签: algorithm optimization data-structures graph shortest-path


【解决方案1】:

一个数字的最小成本可以是以下两种情况之一:

  1. 指定的成本本身
  2. 两个不同数字的成本总和

您所要做的就是运行一个嵌套循环来测试 10 到 99 之间的所有不同数字对。

new_cost = cost[:]
for i in range(0,10):
    for j in range(0,10):
        new_cost[(i+j)%10] = min(cost[i]+cost[j], cost[(i+j)%10])

一旦您获得了每个数字的最低成本,您就可以像正常问题一样进行处理,因为“添加”按钮将毫无用处。

【讨论】:

  • 它需要更加递归。例如。如果 1+1 比 2 便宜, 3+3 比 6 便宜;那么也许 (1+1)+(2+2) 是获得 8 的最便宜方式(即使 2+6 比 8 贵)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2011-12-06
  • 2019-02-06
  • 2020-03-29
相关资源
最近更新 更多