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