【问题标题】:Minimum steps to set a series of rotating dials to a given sequence将一系列旋转刻度盘设置为给定顺序的最小步骤
【发布时间】:2019-01-04 06:18:13
【问题描述】:

所以我有以下问题: 有n个旋转表盘,每个设置为0-9之间的某个数字,它们需要与另一个系列的n个数字(也在0-9之间)匹配。

一步旋转是向上或向下旋转任意数量的连续刻度盘。刻度盘环绕 9。即从 9 向上旋转一步会得到 0,反之亦然。

我需要找到将初始配置与给定配置相匹配的最小步骤数。

例如:Initial -> 154 Given -> 562

1.先移动前2拨号1154 -> 264->1步
2. 将第一个拨号 3 向上移动 264->564 ->3 步
3. 将第 3 个拨盘 2 向下移动 564->562 ->2 步
所以最小步数是6
我不需要代码,只需要对该方法的一些见解。

【问题讨论】:

  • 你的例子不清楚。请以更好的方式解释它。
  • 这似乎是动态编程的明显候选者。我看不到贪心算法或其他一些简单的启发式算法找到最佳解决方案。
  • @m69 关于该方法应该如何的任何想法?
  • 我一直在考虑它,但似乎没有一个明显的事情起作用。这是来自编码比赛吗?这似乎是一个巧妙构造的问题。
  • 是的,它来自黑客马拉松......

标签: algorithm dynamic-programming min


【解决方案1】:

我不确定我是否正确理解了这个问题。好像两个数字一起旋转1步,那一步只算一招,不是两招,对吧?

在这种情况下,为什么不计算每个数字与其在其他系列中的匹配项之间的最小距离。在该组一起减号和加号之后,尽可能将数字一起移动。

例如:

145 -> 632

  • 1 的最小距离为 5+-(向上或向下)
  • 4 的最小距离为 1-
  • 5 的最小距离为 3-

由于只有减法,我将 5 也算作减法,并执行以下操作:

  1. 将所有数字下移一级 -> 034
  2. 将第一个和最后一个数字下移两步 -> 832
  3. 将最后一个数字下移两步 -> 632 = 共 5 步

【讨论】:

  • 这总共有 7 个步骤。 2. 由于数字不连续,需要 4 步。
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2019-06-25
相关资源
最近更新 更多