这就是问题:
您有两个长度相等的数组 A 和 B。您必须将它们分成两组 P 和 Q,这样:(1)它们的差异最小化。(2) 如果 A[i] 进入 P 或 Q 之一, B[i] 应该进入另一个。
这是实际问题的链接:http: //opc.iarcs.org.in/index.php/problems/EQGIFTS
这是我的逻辑(解决实际问题):
如果输入为:abcdefg,则值列表和 a,b,c,d,e,f 的索引分别为 0,1,2,3,4,5
如果 t 是 a,b,c,d,e,f,g 的索引,则程序检查 t 和 i 使得: [t] 处的值 > [ti] 处的值,从 t = 5 开始,并且 i = 1,并将 i 的值增加 1 并将 t 的值减少 1。
一旦找到匹配项,它就会交换两个索引的值并对从 [t-1] 开始的值进行排序。结果值列表是输出。
我不知道这个算法有什么问题,但它对所有测试用例产生了错误的答案。我知道它可以使用动态编程来解决,并且它是分区问题的一种变体。但我不知道如何改变分区算法来解决这个问题。