time limit: 1000 ms memory limit: 65536 kib
submit statistic
problem description
設有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
3 1 3
2 3
5 3
18 sample output
5 hint
source
//硬幣種類有限制,硬幣數目有限制
//多重揹包
#include
//#include
using
namespace
std;
const
int maxvalue = 20001;
const
int coinnum = 15;
int mymin(int a, int b)
int main()
int m;
cin >> m;
//錢數為dp[i]是的硬幣數目
int *dp = new
int[maxvalue]();
//重點錯誤
//for(int i = 0; i <= m; i++)是錯的
for(int i = 1; i <= m;i++)
dp[i] = maxvalue;
int i, j, k;
for(i = 0; i < n; i++)//硬幣面值的種數}}
if(dp[m] == maxvalue)
cout
<< -1
<< endl;
else
cout
<< dp[m] << endl;
return
0;}
多重揹包問題 硬幣
給定n種硬幣,其中第 i 種硬幣的面值為ai,共有ci個。從中選出若干個硬幣,把面值相加,若結果為s,則稱 面值s能被拼成 求1 m之間能被拼成的面值有多少個。輸入格式 輸入包含多組測試用例。每組測試用例第一行包含兩個整數n和m。第二行包含2n個整數,分別表示a1,a2,an和c1,c2,cn。當輸...
硬幣思考多重揹包
給定n種硬幣,其中第 i 種硬幣的面值為ai,共有ci個。從中選出若干個硬幣,把面值相加,若結果為s,則稱 面值s能被拼成 求1 m之間能被拼成的面值有多少個。輸入包含多組測試用例。每組測試用例第一行包含兩個整數n和m。第二行包含2n個整數,分別表示a1,a2,an和c1,c2,cn。當輸入用例n ...
多維多重揹包問題 多重揹包問題
悼念512汶川大 遇難同胞 珍惜現在,感恩生活 急!災區的食物依然短缺!為了挽救災區同胞的生命,心繫災區同胞的你準備自己採購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?後記 人生是乙...