algorithm - 选择策略的动态规划

标签 algorithm dynamic-programming

假设有两个数组:

a[] = a_1, a_2, ..., a_n
b[] = b_1, b_2, ..., b_m

还有一组s包含 (a_i, b_j)对,在这个集合中,我们需要找到没有两对的最大对数(a_i, b_j)(a_i', b_j')满足 i'<i && j'<j .

所以,(a_2, b_1) , (a_3, b_2) (a_1, b_2) 时不允许一起选择和 (a_2, b_1) , (a_1, b_2)(a_3, b_2)很好。

例如集合为{(a_1, b_1), (a_1, b_2), (a_2, b_1), (a_3, b_2)} 我们需要选择(a_1, b_1), (a_1, b_2), (a_2, b_1)用于选择 3 对。

看来需要建立一个dp算法对吧?你有什么提示吗?谢谢

最佳答案

我认为这个问题可以简化为longest increasing subsequence通过按 i 递减来排序 a_i 并按 j 递增来排序 b_j(在 i 相等的情况下)。这将给出复杂度为 O(NlogN) 的解决方案,其中 N 是集合中的条目数。

示例:{(a_1, b_1), (a_1, b_2), (a_2, b_1), (a_3, b_2)}

有序:{(a_3, b_2), (a_2, b_1), (a_1, b_1), (a_1, b_2)}

j 的最长递增子序列:{b_1, b_1, b_2},条目位于索引 {1, 2, 3}

解决方案:{(a_2, b_1), (a_1, b_1), (a_1, b_2)}

关于algorithm - 选择策略的动态规划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775585/

相关文章:

java - 什么是相对于给定图像上具有相对相同颜色的飞机形成的图像形状的最快算法?

python - 将 float 列表与最接近的整数匹配而不重复

algorithm - 给定n条的排序直方图,选择k条,同时最小化右侧墙包围的面积

c++ - O(NlogN) 或 O(Nlog^2N) 中坐标值的 LIS

algorithm - 动态规划 : Calculating kth parentheses sequence

c++ - 使用 std::copy 将一个结构的数组转换为另一个结构的 Vector

algorithm - 二维光栅图像视线算法

c++ - 搜索对应的对

python - 列表元素的最大总和,每个元素由(至少)k 个元素分隔

algorithm - 是否有任何算法可以解决每个字符具有不同权重的最长公共(public)子序列问题?