【发布时间】:2012-10-19 00:37:49
【问题描述】:
这就是问题所在:
您有两个长度相等的数组 A 和 B。您必须将它们分成两组 P 和 Q,这样: (1) 他们的差异被最小化。 (2) 如果 A[i] 进入 P 或 Q 中的一个,B[i] 应该进入另一个。
这里是实际问题的链接:http://opc.iarcs.org.in/index.php/problems/EQGIFTS
这是我的逻辑(解决实际问题):
如果输入是:a b c d e f g,值列表和索引 a,b,c,d,e,f 分别为 0,1,2,3,4,5
如果 t 是 a,b,c,d,e,f,g 的索引,程序会检查 t 和 i 这样 即:[t] 处的值 > [t-i] 处的值,从 t = 5 开始,并且 i = 1,并将 i 的值增加 1 并减小 t 的值 1.
一旦找到匹配项,它就会交换两个索引的值 并对从 [t-1] 开始的值进行排序。 结果值列表是输出。
我不知道这个算法有什么问题,但它对所有测试用例产生了错误的答案。 我知道它可以使用动态编程来解决,并且它是分区问题的一种变体。但是我不知道如何改变分区算法来解决这个问题。
【问题讨论】:
-
您的问题陈述与链接中的问题陈述在两个方面不同(可能很重要,也可能不重要)。在原始问题中,数组元素是 (1) 正数和 (2) 以已知常数(单词问题中的 300)为界。您已经删除了这两个约束。但是,我不知道这是否会改变问题的固有复杂性。
标签: algorithm dynamic-programming partition-problem