输入:
参数1,正数数组costs 参数2,正数数组profits 参数3,正数k 参数4,正数m costs[i]表示i号项目的花费 profits[i]表示i号项目在扣除花。 费之后还能挣到的钱(利润) k表示你不能并行、只能串行的最多做k个项目 m表示你初始的资金
说明:你每做完一个项目,马上获得的收益,可以支持你去做下一个 项目。
输出: 你最后获得的最大钱数。
给定一个初始投资资金,给定N个项目,想要获得其中最大的收益,并且一次只能做一个项目。这是一个贪心策咯的问题,按照花费的多少放到一个小根堆里面,然后要是小根堆里面的头节点的花费少于给定资金,就将头节点一个个取出来,放到按照收益的大根堆里面,这样就然后将大根堆 的堆顶弹出。
import java.util.Comparator;
import java.util.PriorityQueue;
public class C04_IPO {
//一个节点代表一个项目
public static class Node{
int profit;//收益
int cost;//花费
public Node(int profit,int cost){
this.profit = profit;
this.cost = cost;
}
}
/**
* 计算最大项目收益k:最多可以做多少个项目,w:总资金,profit:收益,cost:花费
* @param k:最多可以做多少个项目
* @param w:总资金
* @param profit:收益
* @param cost:花费
* @return
*/
public static int ipo(int k,int w,int cost[],int profit[]){
//小根堆,大根堆
PriorityQueueminQueue = new PriorityQueue(new minHeapCompatator());
PriorityQueuemaxQueue = new PriorityQueue(new maxHeapCompatator());
Node curNode;
for (int i = 0; i < cost.length; i++) {
curNode = new Node(profit[i], cost[i]);
minQueue.add(curNode);
}
for (int i = 0; i < k; i++) {
while(minQueue.peek().cost
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?