題目描述:
輸入:
cost:每個專案的花費
profits:每個專案的利潤(純利潤)
k:最多能做k個專案
w:表示初始資金
輸出:最後獲得的最大錢數
說明:一次只能做乙個專案,且做完乙個之後馬上就能獲得收益,可以支援做下乙個專案
/*
貪心策略:當資金有限時如何選擇那個專案使得掙的錢最多
演算法思想:
(1)將所有專案按照花費值costs加入到小根堆中
(2)從小根堆中取出可以做的專案(當前的花費值小於初始資金w)按照利潤值profits加入到大根堆中
(3)開始做專案,更新w的值;直到做滿k次,或者新的w值仍不滿足做新的專案(資金不夠,不足以支撐新的專案)
*//*
測試用例:
4(專案總數)
5 10 6 20 (costs)
3 2 4 9 (profits)
7 (初始資金)
2 (專案執行最多次數)
輸出:14
演算法思想:按照costs最低入小根堆(全部專案);從小根堆中取出costs低於已有資金(初始資金+做專案完成收益)
的專案,按照profits最高入大根堆,並做專案;直到已有資金不足以支援做下乙個專案或者專案次數達到k時,說明
此時收益最大
*/#include
#include
using
namespace
std;
struct node
};//小根堆只比較花費,不用比較利潤
struct mincostcomparator
};//大根堆只比較利潤,不用比較花費
struct maxprofitcomparator
};int maxprofits(int w, int k, int *costs, int *profits, int n)
//最多做k次專案
for(int s = 0; s < k; s ++)
if(maxprofitsque.empty())
w += maxprofitsque.top().p;
maxprofitsque.pop();
}return w;
}//for test
int main()
for(int j = 0; j < n; j ++)
int w, k;//w為初始本金,k為專案最多次數
cin>>w>>k;
cout
0;}
演算法策略 貪心
目錄 貪心 greedy 練習1 最優裝載問題 加勒比海盜 問題 思路 實現 練習2 零錢兌換 問題 思路 實現 貪心策略中存在的問題 注意 練習3 0 1揹包 問題 思路例項分析 實現 貪心策略,也稱為貪婪策略,每一步都採取當前狀態下最優的選擇 區域性最優解 從而希望推導出全域性最優解 貪心的應用...
貪心演算法 堆 成本與利潤
輸入 引數1,正數陣列costs 引數2,正數陣列profits 引數3,正數k 引數4,正數m costs i 表示i號專案的花費 profits i 表示i號專案在扣除花費之後還能掙到的錢 利潤 k表示你不能並行 只能序列的最多做k個專案 m表示你初始的資金 將每個專案的成本和利潤放到一起,然後...
畜欄問題(貪心策略)
題目內容 有n頭牛 1 n 50,000 要 給定每頭牛 的時間區間 a,b 1 a b 1,000,000,a,b為整數 牛需要呆在畜欄裡才能 乙個畜欄同一時間只能容納一頭牛。問至少需要多少個畜欄,才能完成全部 工作,以及每頭牛都放哪個畜欄裡?注意 在同乙個畜欄的兩頭牛,它們 時間區間不能在端點重...