本帖最后由 alicedodo 于 2011-9-7 10:38 编辑
一道数据结构的题,求一个算法
有一种这样的数据对象:
1)每个对象含有两个可用无符号整型表示的属性,分别为u16Quick(敏捷)和u16Strong(力量)
2)敏捷和力量之间没有任何关系,互不影响
现在我们随机创建一些对象实体,每个实体的属性值也是随机赋值的,创建若干个之后,我们便得到了一
个对象集合。
题目的要求是:从这个集合中找出一个满足以下条件的最大有序子集:
1)子集表示为{O1,O2,O3, ······,On},如果有1<=i<j<=n,那么Oj的敏捷值不低于Oi的敏捷值且
Oj的力量值不低于Oi的力量值。
2)在所有能满足条件1)的子集中,我们要找到包含对象数量最多的那个子集,如果这样的子集有多个
,只找出一个即可。
3)找到目标子集后,我们要能按{O1,O2,O3, ······,On}的顺序将对象挨个输出。
例如对象集合包含A[1,7]、B[4,9]、C[3,3]、D[5,7]、E[3,5]共5个对象(敏捷值在前),那么符合要求的最
大有序子集就是{C[3,3],E[3,5],B[4,9]}和{C[3,3],E[3,5],D[5,7]} ,我们只找出其中一个来就可以了。
这个问题想了很久了,一直没思路,求一个能解决上述问题的算法。 |