1.这个题第一反应就是要对难度进行排序,但是如果只对难度进行排序,那后面取收益的的时候就找不到对应的了,所以要对难度和收益进行绑定再对难度排序。
2.有了单调递增的难度后,就是根据工人的能力选择对应的工作了,工人的能力要小于或等于工作的难度,次数用二分法进行优化查找,但是要注意两种情况,工人的能力小于最小难度或大于最大难度。
3.此外本题没有指出难度大收益大,所以在每一项维护一个最大收益
typedef struct {
int diffcult;
int prof;
int maxProf;
} DiffAndProf;
int Compare(void *a, void*b)
{
return ((DiffAndProf*)a)->diffcult - ((DiffAndProf*)b)->diffcult;
}
int BinarySearch(DiffAndProf *difficulty, int size, int ablity)
<