本文主要是介绍项目利润(贪心算法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
输入: 参数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<Node>{@Overridepublic int compare(Node o1, Node o2) {// TODO Auto-generated method stubreturn o1.p-o2.p;} }private static class MaxCostComparator implements Comparator<Node>{@Overridepublic int compare(Node o1, Node o2) {// TODO Auto-generated method stubreturn o2.c-o1.c;} }public static int LessMoney(int k, int W, int[] Profits, int[] Capital){PriorityQueue<Node> Min = new PriorityQueue<Node>(11,new MinProfitComparator());PriorityQueue<Node> Max = new PriorityQueue<Node>(11,new MaxCostComparator());for(int i=0;i<Profits.length;i++){Min.add(new Node(Profits[i],Capital[i]));}int money=W;for(int i=0;i<k;i++){while(Min.peek().p<=money){Max.add(Min.poll());}Node priority = Max.poll();money -=priority.p;money +=priority.c;}return money;}public static void main(String[] args) {// TODO Auto-generated method stub}}
这篇关于项目利润(贪心算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!