用于选择策略的动态编程

时间:2018-02-13 21:02:33

标签: 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算法,对吧?你有什么暗示吗?感谢

1 个答案:

答案 0 :(得分:0)

我认为这个问题可以减少到longest increasing subsequence,方法是将a_i排序为i,将b_j排序为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)}

相关问题