dp 最少硬幣問題

2021-05-27 19:52:43 字數 1054 閱讀 7587

問題描述:

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

對任意錢數0≤m≤20001,設計乙個用最少硬幣找錢m的方法。

程式設計任務:

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

資料輸入:

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

結果輸出:

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

樣例:3

1 32 3

5 318

核心思想

f[i,j]=min前i個硬幣組成j錢時所用的最少硬幣數

var f:array[0..20010]of longint;

c,t:array[0..10]of longint;

k,n,i,j,m:longint;

function min(a,b:longint):longint;

begin

ifa>b then exit(b);

exit(a);

end;

begin

assign(input,'p31.in');reset(input);

assign(output,'p31.out');rewrite(output);

fillchar(f,sizeof(f),100);

f[0]:=0;

readln(n);

fori:=1 to n do readln(t[i],c[i]);

readln(m);

fori:=1 to n do

fork:=1 to c[i] do

for j:=m downto k*t[i] do

f[j]:=min(f[j-k*t[i]]+k,f[j]);

iff[m]

最少硬幣問題 dp思想

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

最少硬幣問題

問題描述 有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...