最少硬幣問題(多重揹包)

2021-08-18 16:50:46 字數 1245 閱讀 7265

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種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?後記 人生是乙...