我们给出了N个水果的集合F = {a1,a2,a3,...,aN}。每个水果都有价格Pi和维生素含量Vi。现在我们必须安排这些水果,使列表中的价格按升序排列,列表中的维生素按降序排列。
例如:: N = 4
Pi:2 5 7 10
Vi:8 11 9 2
答案 0 :(得分:1)
我会尝试将问题减少到longest increasing subsequent problem。
此解决方案为O(nlogn)
,因为步骤(1)和(2)均可在O(nlogn)
中完成。
在Efficient Algorithms下查看维基百科文章 - 如何实现增长最快的后续
修改强>
如果您的列表允许重复,则在主要条件相同的情况下,您的排序[步骤(1)]必须按第二个参数排序作为次要标准。
示例 [您的示例2]:
Pi::99 12 34 10 87 19 90 43 13 78
Vi::10 23 4 5 11 10 18 90 100 65
在第1步之后,您会[在Vi
为主要标准时进行排序,降序]:
Pi:: 013 43 78 12 90 87 87 99 10 34
Vi:: 100 90 65 23 18 11 10 10 05 04
第二步找到Pi中增长最长的子序列,得到:
(13,100), (43,90), (78,65), (87,11), (99,10)
作为一种可行的解决方案,因为它是排序列表中[根据Pi
]增加的子序列。
P.S。在这里,我假设你想要的增加的子序列严格增加,否则结果是(13,100),(43,90),(78,65),(87,11),(87,10),(99,10)
- 这是更长的子序列,但根据Pi
和Vi
它没有严格增加/减少