最大利润
原创
©著作权归作者所有:来自51CTO博客作者放下也不自在的原创作品,请联系作者获取转载授权,否则将追究法律责任
import java.util.Comparator;
import java.util.PriorityQueue;
* 输入正数数组cost表示每个项目的花费,正数数组profits表示每个项目的利润,M表示初始资金,K表示最多只能串行做k个项目
public static int findMaximizedCapital(int k, int m, int[] profits, int[] costs) {
PriorityQueue<Program> minCostQ = new PriorityQueue<>(Comparator.comparingInt(a -> a.cost));
PriorityQueue<Program> maxProfitQ = new PriorityQueue<>((a, b) -> b.profit - a.profit);
for (int i = 0; i < profits.length; i++) {
minCostQ.add(new Program(profits[i], costs[i]));
for (int i = 0; i < k; i++) {
while (!minCostQ.isEmpty() && minCostQ.peek().cost <= m) {
maxProfitQ.add(minCostQ.poll());
if (maxProfitQ.isEmpty()) {
m += maxProfitQ.poll().profit;
public static class Program {
public Program(int profit, int cost) {