我有一个编号元素 1 到 N 的列表,它们适合从 1 开始的数轴上的位置。我也对这些元素有限制:
- 元素 1 位于位置 1,元素 N 必须位于 >= 元素 N-1 的位置。(即元素 2 可能在位置 1,元素 3 在位置 7,元素 4 在位置 8(但不是位置 5))
- 某些元素必须在一定距离内才能在线。
- 某些元素必须至少与其他元素保持一定距离就行了。
我的目标是返回一个整数,表示元素 1 和元素 N 之间的最大跨度。如果没有可能的排列,则返回 -1,如果元素可以相隔任意距离,则返回 -2。
我得到:
- 元素数量
- 一个 withinArray[][] 其中 withinArray[x][y] = 距离元素 x 和 y 必须在行内。任何零值表示没有约束。
- 一个 atLeastArray[][] 其中 atLeastArray[x][y] = 距离元素 x 和 y 必须在线上分开。任何零值表示没有约束。
一个示例输入是:4 个元素,withinArray 1 [3] = 10,withinArray[2][4] = 20,和 atLeastArray[2][3] = 3。(所有其他数组值为零)。
此输入的返回值为 27。(元素 1 位于位置 1,元素 2 位于位置 8,元素 3 位于位置 11,元素 4 位于位置 28)
这个问题首先是由其他人在这里发布的。我想以编程方式找出一个优雅的解决方案。尽管我已经为此工作了一整天,但我仍然没有找到一个好的解决方案。我觉得我需要使用动态编程技术,但很难找到一个好的子结构。
我无法在网上找到相同的示例。任何指向此类在线材料的指针将不胜感激。如果您是此类问题的专家并且可以详细概述解决方案,那就更好了。可执行代码是一个加号。
编辑:我知道如何将其表述为线性规划问题,并且我知道如何使用 LP 求解器来解决它。我只是更喜欢具有指定输入和输出的端到端解决方案。一般的答案可能对我没有多大帮助。