自定义类型的小根堆(priority_queue)
struct Node{
int cost;
int profit;
};
struct cmp1{
bool operator()(Node n1,Node n2) {
return n1.profit < n2.profit;
}
};
struct cmp2{
bool operator()(Node n1,Node n2) const{
return n1.cost > n2.cost;
}
};
class Solution {
public:
int findMaximizedCapital(int k, int m, vector<int>& costs, vector<int>& profits) {
vector<vector<int> >val;
for(int i=0;i<costs.size();++i){
val.push_back({costs[i],profits[i]});
}
priority_queue<Node,vector<Node>,cmp2 >min;
priority_queue<Node,vector<Node>,cmp1 >max;
for(int i=0;i<costs.size();++i){
struct Node node;
node.cost=costs[i];
node.profit=profits[i];
min.push(node);
}
for(int i=1;i<=k;++i){
while(!min.empty()){
if(min.top().cost<=m){
max.push(min.top());
min.pop();
}
else break;
}
if(max.empty())break;
m+=max.top().profit;
max.pop();
}
return m;
}
};