貪心策略 專案利潤

2021-08-25 05:58:49 字數 1292 閱讀 2437

題目描述:

輸入:

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為整數 牛需要呆在畜欄裡才能 乙個畜欄同一時間只能容納一頭牛。問至少需要多少個畜欄,才能完成全部 工作,以及每頭牛都放哪個畜欄裡?注意 在同乙個畜欄的兩頭牛,它們 時間區間不能在端點重...