项目利润(贪心算法)
2018-02-13 20:44
176 查看
输入: 参数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>{
@Override
public int compare(Node o1, Node o2) {
// TODO Auto-generated method stub
return o1.p-o2.p;
}
}
private static class MaxCostComparator implements Comparator<Node>{
@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<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
}
}
相关文章推荐
- BADI增强 ac_document 用行项目中某行的利润中心去替代另外一行
- 个人体会:项目关系处理 → 建立攻守联盟 → 利润共享
- 如何在互联网中找到利润高的项目
- 关键2招提升软件开发项目的利润
- 机器学习项目实战之贷款申请最大利润
- 如何在互联网中找到利润高的项目?
- 如何在互联网中找到利润高的项目?
- 如何升软件开发项目的利润
- 微软Dynamics SL(SOLOMON)帮助项目赢得更多利润!(引用)
- BADI增强 ac_document 用行项目中某行的利润中心去替代另外一行
- 利润中心凭证项目不能带出客户编码
- 如何在互联网中找到利润高的项目?
- 如何在互联网中找到利润高的项目?
- 发票到会计凭证时,将利润中心分配到所有项目中
- 如何在互联网中找到利润高的项目?
- 软件项目的绩效考核、难点及公司利润分析
- 如何在互联网中找到利润高的项目?
- 关于《资产负债表》中未分配利润项目的填列
- 如何在互联网中找到利润高的项目?