这一篇大概有50篇JPTT废文价值左右==
502. IPO
有资本w,有n个产品,选第i个产品做可以得到其利益profit[i](每个产品只能做一次),
有前提是选做第i个产品时本金w必须 >= capital[i],若做了则可使资本增加profit[i],
问最多做k个产品可以得到的最大资本
n <= 1e5, profit[i] <= 1e4, capital[i] <= 1e9, w <= 1e9, k <= 1e5.
答案在32bit整数以内
然后就想到把profit[i]对capital[i]排序一下,然后把 capital[i] <= w 对应的
profit[i]丢进大根堆...
C++ code:
class Solution {
public:
    int findMaximizedCapital(int k, int w, vector<int>& p, vector<int>& c) {
        int n = p.size();
        vector<pair<int, int>> v;
        for(int i=0; i<n; i++) v.push_back({c[i], p[i]});
        sort(v.begin(), v.end());
        priority_queue<int> q;
        int cur = 0;
        while(k){
            while(cur < n && w >= v[cur].first){
                q.push(v[cur].second);
                cur++;
            }
            if(q.empty()) break;
            w += q.top();
            q.pop();
            k