您当前的位置: 首页 >  算法

庄小焱

暂无认证

  • 1浏览

    0关注

    805博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

算法问题——项目最大收益问题

庄小焱 发布时间:2020-08-01 18:22:14 ,浏览量:1

输入:

参数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            
关注
打赏
1657692713
查看更多评论
0.0411s