貪心演算法之專案獲得的最大錢數 IPO

2021-09-20 18:59:50 字數 1040 閱讀 5718

題目:

給你兩個陣列,costs和profit是,第乙個陣列表示每個專案所花費的錢數,第二個陣列表示每個專案所能掙得的利潤。k表示你不能並行、只能序列的最多 做k個項

目 m表示你初始的資金 說明:你每做完乙個專案,馬上獲得的收益,可以支援你去做下 乙個 專案。 輸出: 你最後獲得的最大錢數。

解題思路:

首先,我們把這些專案都當作乙個乙個的節點,分別有兩個屬性,花費和利潤。然後建兩個堆,乙個是按照花費從小到大的小根堆,還有乙個是按照收益從大到小的大根堆,然後每做乙個專案的時候,都把小根堆裡花費小於當前所擁有錢的節點都彈出,進入大根堆,然後再從大根堆裡找到收益最大的專案節點彈出,做這個專案,直到做完k個專案,或者當前所擁有的錢不足以再接著做專案了。

**如下:

public class ipo 

} public static class mincostcomparator implements comparator

} public static class maxprofitcomparator implements comparator

} public static int findmaximizedcapital(int k, int w, int profits, int capital)

priorityqueuemincostq = new priorityqueue<>(new mincostcomparator()); //生成小根堆

priorityqueuemaxprofitq = new priorityqueue<>(new maxprofitcomparator());//生成大根堆

for (int i = 0; i < nodes.length; i++)

for (int i = 0; i < k; i++)

if (maxprofitq.isempty())

w += maxprofitq.poll().p;

} return w;

}}

南陽oj貪心演算法之尋找最大數

尋找最大數 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行...

跳躍遊戲之超簡單的貪心演算法

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。例子 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。思路 不考慮每一步...

重疊區間問題之逆思維的貪心演算法

給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。本題主要有兩個難點 如何找到貪心策略 如何斷定兩區間重疊 貪心策略 問題轉化 移除哪個區間,轉化為選擇哪些區間 貪心選擇 根據每個...