貪心法(經典例題篇)

2022-07-27 09:30:12 字數 1040 閱讀 3816

思想:不斷選取當前最優策略

例題一:

硬幣問題

description

有1元、5元、10元、50元、100元、500元的硬幣各c1、c5、c10、c50、c100、c500枚。現在要用這些硬幣來支付a元,最少需要多少枚硬幣?(題目一定有解。)

input

輸入包含多組測試用例,對於每組測試用例:

輸入7個整數,前6個整數ci分別代表6種硬幣的個數,接著輸入乙個整數a(0 <= ci<= 109,1 <= a <= 109)。

output

輸出最少需要多少枚硬幣。

sample input 1

3 2 1 3 0 2 620
sample output 1

6
hint

5元硬幣2枚,10元硬幣1枚,50元硬幣2枚,500元硬幣1枚。

思路:與之前的硬幣問題(盡可能多的使用大面值的硬幣)有所區別,之前的題目說的是每種硬幣個數不限(當時的思路是將各個面值放入ku[ ], 迴圈遍歷,每次操作就是 :硬幣的個數 = 當前的錢 % 面值, 當前錢數 - = 兌換過的硬幣數),而這次限制了硬幣數量意味著兌換的硬幣數要根據該面值的硬幣本來的數量進行變化。

#include #include 

#include

#include

#include

#include

using

namespace

std;

intmain();

int num[6

];

while(cin >> num[0

])

intmoney;

cin >>money;

int cnt = 0

;

for(int i = 5; i >= 0; i--)

cout

<< cnt <

}return0;

}

view code

例題二:

區間問題

貪心法經典例題

有1元,5元,10元,50元,100元,500元的硬幣各c1,c5,c10,c50,c500枚。現在要用這些硬幣支付a元,最少需要多少枚硬幣?輸入 3 2 1 3 0 2 620輸出 6 include using namespace std intmain for int i 0 i 6 i in...

貪心演算法經典例題3 飛彈發射問題

問題描述 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.怎麼辦呢?多搞幾套系統...

貪心演算法經典例子

貪心演算法總是作出在當前看來最好的選擇。也就是說貪心演算法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇。基本思想 貪心演算法並不從整體最優上加以考慮,它所做的選擇只是在某種意義上的區域性最優解。基本要素 最優子結構性質和貪心選擇性質。和動態規劃區別 動態規劃演算法中,每步所做的...