说明方法的运行时间。期望多项式时间算法。
俱乐部想为学生组织一个派对。但是,只有部分学生可以参加
派对。候选人按照以下要求成对选择:假设
学生排队,每个学生都有一个幸运号码,有些学生可能有
同样的幸运数字。俱乐部要求只有拥有相同运气号码的学生才可以
配对并参加聚会,而所有学生在所选择的一对中将失去
机会。
我们已帮助俱乐部正式制定问题。
给定一系列正整数(表示幸运数字)A = (a1, a2, ... an)
,一对(ai, aj)
被定义为ai=aj
和i<j
的跳舞对。跳舞对列表L = {(1,1),......(,)}
当且仅当对于任何两对(,),(,)L,jx<iy
或jy<ix
1 ≤ , ≤
时,这是好的。
例如,如果A = {1,3,4,1,2,3,2,4,3,5,3,4,5},一些好的舞蹈列表可能是:
{(1,1),(2,2),(3,3)}(位置A = { 1 ,3,4, 1 , 2 ,3, 2 ,4, 3 ,5, 3 ,4,5}}
{(1,1),(3,3)(5,5)}(位置A = { 1 ,3,4, 1 ,2 , 3 ,2,4, 3 , 5 ,3,4, 5 })
a)给定一系列正整数A,设计一个多项式时间算法来找到a 良好的舞蹈配对列表,最大数量的舞蹈配对。
b)假设跳舞对(ai, aj)
的重量为ai+aj
。一个好跳舞的总重量
list是列表中跳舞对的所有权重的总和。设计多项式时间
算法找到一个具有最大总重量的好跳舞对列表。
对于a部分, 如果我这样写
foreach list L
foreach item I in list L
foreach list L2 such that L2 != L
for each item I2 in L2
if I == I2
return new 3-tuple(L, L2, I) //
如何继续?