publicintFindMaximizedCapital(Work[] work, int k, int W) { // 最小堆:按成本升序 var minCost = new PriorityQueue<int, int>(); // 最大堆:按利润降序(通过负数模拟) var maxProfit = new PriorityQueue<int, int>();
// 初始化最小堆(存储工作索引) for (int i = 0; i < work.Length; i++) { minCost.Enqueue(i, work[i].Pay); }
for (int i = 0; i < k; i++) { // 将所有可承担成本的工作加入最大堆 while (minCost.Count > 0 && work[minCost.Peek()].Pay <= W) { int idx = minCost.Dequeue(); maxProfit.Enqueue(work[idx].Money, -work[idx].Money); // 负数模拟大根堆 }
if (maxProfit.Count == 0) break; // 无项目可选 W += maxProfit.Dequeue(); // 选择利润最大的项目 }
publicclassSolution { publicintFindMaximizedCapital(int k, int w, int[] profits, int[] capital) { // 创建项目列表 var projects = new List<Project>(); for (int i = 0; i < profits.Length; i++) { projects.Add(new Project(profits[i], capital[i])); }
// 最小堆:按资本升序排序 var minCostQueue = new PriorityQueue<Project, int>(); // 最大堆:按利润降序排序 var maxProfitQueue = new PriorityQueue<Project, int>(Comparer<int>.Create((x, y) => y.CompareTo(x)));