这是一道按常规方法做就会超时的题目,所以我一开始就舍弃了多层循环的方法。
我选择对Profits进行排序,这样就可以从最大的利润开始访问,以求最大化。但是这样就会出现Profits和Capital的顺序无法对应,于是我就采用排序前将Profits的序号(也就是Capital的序号)加到Profits的50000倍里的方法,这样Profits的元素值对50000求余之后的结果就是它排序前的序号(也就是Capital的序号)。之后的解决便十分顺利了。
还有一个值得注意的点是,“The answer is guaranteed to fit in a 32-bit signed integer”,所以用来装Profits的50000倍加序号的vector的类型应该是unsigned int。
以下是代码: