硬幣問題 (dp,多重揹包的二分優化)

2022-05-06 09:24:10 字數 848 閱讀 2210

給你n種硬幣,知道每種的面值ai和每種的數量ci。問能湊出多少種不大於m的面值。

有多組資料,每一組第一行有兩個整數 n(1≤n≤100)和m(m≤100000),第二行有2n個整數,即面值a1,a2,a3,…,an和數量c1,c2,c3,…,cn (1≤ai≤100000,1≤ci≤1000)。所有資料結束以2個0表示。

每組資料輸出一行答案。

3 10

1 2 4 2 1 1

2 51 4 2 1

0 0

8

詳細的說明在 

**如下:

1 #include 2

3using

namespace

std;45

int w[100010],v[20010],maxn=0,dp[100010

],n,m,cnt,x;

6void f(int weight,int num)//

把硬幣進行二分的合併

717 num-=i;

18if (num<=0)19

return;20

}21}22

intmain()

2342

for (int i=1;ii)

4349}50

int ans=0;51

for (int i=1;i<=m;++i)

52if (dp[i]) ans++;

53 printf("

%d\n

",ans);54}

55return0;

56 }

多重揹包(普通 二分優化)

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi,wi,s...

多重揹包問題 硬幣

給定n種硬幣,其中第 i 種硬幣的面值為ai,共有ci個。從中選出若干個硬幣,把面值相加,若結果為s,則稱 面值s能被拼成 求1 m之間能被拼成的面值有多少個。輸入格式 輸入包含多組測試用例。每組測試用例第一行包含兩個整數n和m。第二行包含2n個整數,分別表示a1,a2,an和c1,c2,cn。當輸...

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

time limit 1000 ms memory limit 65536 kib submit statistic problem description 設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n...