【问题标题】:Connect bridges without crossing - dynamic programming algorithms design无交叉连接桥梁——动态规划算法设计
【发布时间】:2020-11-25 19:08:55
【问题描述】:

考虑一张二维地图,其中一条水平河流穿过其中心。有n个城市 在北岸,x 坐标为 a(1) ... a(n),南岸有 n 个城市 x 坐标为 b(1) ... b(n)。我想连接尽可能多的南北对城市 尽可能使用没有两座桥交叉的桥梁。连接城市时,我可以 只连接北岸的城市 i 和南岸的城市 i。如何使用动态编程解决这个问题?

【问题讨论】:

  • 你可以使用整数规划解决这个问题

标签: algorithm dynamic-programming


【解决方案1】:

当且仅当a(i) < a(j) and b(i) > b(j)a(i) > a(j) and b(i) < b(j) 时,两行ij 交叉。查看按a 值排序的解决方案中的行,当且仅当相应的b 值增加时,不存在交叉。因此,我们应该将(a, b) 对按a 排序,并计算b 上的最长递增子序列。

【讨论】:

  • 问题的一个条件是我不能改变i和j的位置
  • @youssefmanyalawy 是的,排序会串联移动元素。因此,如果示例看起来像 a = [1, 3, 2, 4, 5] 和 b = [2, 1, 3, 5, 4],那么我们交换两个数组中的第二个和第三个位置以获得 a' = [1, 2, 3, 4, 5] 和 b' = [2, 3, 1, 5, 4],所以线的 x 坐标是 (1, 2) (2, 3) (4, 5),这适用于原始数组的第 1、3、4 行。
  • 好的,但正如我所说,我们不能改变元素的位置,我们只能连接数字
  • @youssefmanyalawy 考虑排序的另一种方式是,它以相同的方式重新标记每个桥的两个端点,以便桥集保持不变。
  • 这是一个未说明的假设,即每组城市(北部和南部)的 y 坐标是恒定的。虽然我同意这个假设,但meandering river shown in the drawing 不支持它。
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多