详见:https://leetcode.com/problems/ipo/description/
C++:
class Solution {
public:
int findMaximizedCapital(int k, int W, vector<int>& Profits, vector<int>& Capital)
{
vector<pair<int, int>> v;
for (int i = 0; i < Capital.size(); ++i)
{
v.push_back({Capital[i], Profits[i]});
}
sort(v.begin(), v.end());
for (int i = 0; i < k; ++i)
{
int left = 0, right = v.size(), mx = 0, idx = 0;
while (left < right)
{
int mid = left + (right - left) / 2;
if (v[mid].first <= W)
{
left = mid + 1;
}
else
{
right = mid;
}
}
for (int j = right - 1; j >= 0; --j)
{
if (mx < v[j].second)
{
mx = v[j].second;
idx = j;
}
}
W += mx;
v.erase(v.begin() + idx);
}
return W;
}
};
参考:http://www.cnblogs.com/grandyang/p/6788811.html