项目利润(贪心算法)

输入: 参数1,正数数组costs 参数2,正数数组profits 参数3,正数k 参数4,正数m

costs[i]表示i号项目的花费 profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润) k表示你不能并行、只能串行的最多做k个项目 m表示你初始的资金

说明:你每做完一个项目,马上获得的收益,可以支持你去做下一个 项目。

输出: 你最后获得的最大钱数


每一贪心类的题,都有一个贪心策略,这道题,用到的贪心策略:

当你的资金有限时怎么选择去做那个项目能挣的钱比较多?

肯定是在自己能做的项目中找最赚钱的

package basic_class_04;
import java.util.*;
public class Main {
	private static class Node {
		public int p;
		public int c;
		public Node(int p, int c) {
			this.p = p;
			this.c = c;
		}
	}
	
	
	private static class MinProfitComparator implements Comparator{

		@Override
		public int compare(Node o1, Node o2) {
			// TODO Auto-generated method stub
			return o1.p-o2.p;
		}	
	}
	private static class MaxCostComparator implements Comparator{

		@Override
		public int compare(Node o1, Node o2) {
			// TODO Auto-generated method stub
			return o2.c-o1.c;
		}	
	}
	
	
	public static int LessMoney(int k, int W, int[] Profits, int[] Capital){
		PriorityQueue Min = new PriorityQueue(11,new MinProfitComparator());
		PriorityQueue Max = new PriorityQueue(11,new MaxCostComparator());
		for(int i=0;i

你可能感兴趣的:(算法)