Exercise 3 最少硬幣問題

2021-07-11 09:21:44 字數 1250 閱讀 7341

/*  

陳潼公升最少硬幣問題

問題描述

設有n 種不同面值的硬幣,各硬幣的面值存於陣列t[1:n]中。現要用這些面值的硬幣來找錢。

可以使用的各種面值的硬幣個數存於陣列coins[1:n]中。對任意錢數0≤m≤20001,設計乙個用最少硬幣找錢m的方法。

程式設計任務:對於給定的1≤n≤10,硬幣面值陣列t和可以使用的各種面值的硬幣個數陣列coins,以及錢數m,0≤m≤20001,程式設計計算找錢m的最少硬幣數。

input

輸入包括多組測試資料,每組輸入的第一行中只有1 個整數給出n的值,第2 行起每行2 個數,分別是t[j]和coins[j]。每組輸入最後1 行是要找的錢數m。

output

對於每組輸入資料,輸出一行,即計算出最少硬幣數。問題無解時輸出-1。

sample input

31 3

2 35 3

18sample output

5*//*

將乙個問題**成n個子問題,求出子問題的解並用子問題的解出問題的答案。即為動規

問題分析 :

給m找零 可分為 找1塊,找2塊,找3塊,找4塊......找m塊。

定義長度為m的陣列dp[1...m],用其存放一系列子問題的結果,

即dp[i]為要湊i塊錢所需最少硬幣數,則dp[m]為本題答案.

當前要找的錢數為i(1#include

#define max 20001

#define maxlen 99999999999

using

namespace

std;

int min(int,int);

int main()

int m, dp[20002]; // dp[20002]存放一系列子找零問題的結果

cin>>m;

for(i=1;i1;i++) // 因為要取最小,因此要初始化為(大大地 :drastically)數

dp[i] = maxlen;

dp[0] = 0;

for(i=1;i<=n;i++) // 各種硬幣

for(j=1;j<=coins[i];j++) // 各種硬幣的個數

for(k=m;k>=t[i];k--)

cout

return0;}

int min(int a,int b)

最少硬幣問題

問題描述 有n種不同面值的硬幣,各硬幣面值存於陣列t 1 n 現用這些面值的錢來找錢 各面值的個數存在陣列num 1 n 中。程式設計任務 對於給定的1 n 10,硬幣面值陣列 各面值的個數及錢數m,0 m 2001,程式設計計算找錢m的最少硬幣數。input 第乙個數字n,後面n行每行兩個數,面值...

最少硬幣問題

本文內容遵從 cc版權協議 設有n 種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數與面值分別存於陣列coin 1 n 和t 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法,對於給定的1 n 10,硬幣面值陣列t...

最少硬幣問題

問題描述 設有n 種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬 幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法。程式設計任務 對於給定的1 n 10,硬幣面值陣列t和可以使用的各種面值的硬...