硬幣問題(二) 貪心

2022-05-02 11:39:08 字數 680 閱讀 6235

一、問題描述

有1元、5元、10元、50元、100元、500元的硬幣各c1、c5、c10、c50、c100、c500枚。現要用這些硬幣來支付a元,最少需要多少枚硬幣?假設本題最少存在一種支付方案。(0 ≤ c1、c5、c10、c50、c100、c500 ≤ 109,0 ≤ a ≤ 109 )

二、問題分析

之前有一道類似的硬幣問題,n種硬幣支付s元,但每種硬幣無限,求硬幣數最多和最小是多少,可轉化為dag上的最長和最短路。但這道題每種硬幣數量有限不好建圖,且資料規模很大,必須用一種高效的演算法。

如果我們每次選面值盡可能大的,就能保證硬幣數越小,(可用反證法證明正確性)。

三、**實現

1 #include2 #include3 #include4

using

namespace

std;56

const

int v[6] = ;

7int a,c[6];8

9void

slove()

1018

19 printf("

%d\n

", ans);20}

2122

intmain()

23

四、總結

這是最簡單的貪心題吧!也提醒我們當資料規模很大時,要考慮到貪心演算法,因為它非常高效。

硬幣問題(貪心)

有1元,5元,10元,50元,100元,500元的硬幣各a1,a5,a10,a50,a100,a500枚,現在要用這些硬幣支付money元,最少需要支付多少硬幣?假定本題至少一種支付方案。分析 要使數量最少,所以要先從面值大的開始選擇,依次往下類推,即可得到最佳答案。優先選擇面值大的。include...

翻硬幣(貪心)

歷屆試題 翻硬幣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 ...

翻硬幣 貪心

問題描述 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 如果已知了初始狀態和要達到的目標狀態,每次只能同時翻轉相鄰的兩個硬...