給你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 101 2 4 2 1 1
2 51 4 2 1
0 0
8詳細的說明在
**如下:
1 #include 23using
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...