題目大意:
有$n$種物品和乙個容量為$w$的揹包。第$i$種物品最多有$c[i]$件可用,每件體積是$w[i]$,價值是$v[i]$。求解將哪些物品裝
入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
解題思路:採用二進位制拆分的思想,將有限的揹包劃分為01揹包和完全揹包解決。
轉移方程:$dp[i][j] = \max \ $
1 #include2using
namespace
std;
3 typedef long
long
ll;4
int c[50002],w[50002],v[50002
],n,w;
5 ll dp[50002];6
void bag01(int ww,int
vv)10}11
void bagcomplete(int ww,int
vv)15}16
void
bagmult()
22else
29 bag01(c[i]*w[i],c[i]*v[i]);30}
31}32}
3334
intmain()
39bagmult();
40 printf("
%lld
",dp[w]);
41 }
51nod 1086 多重揹包模板
有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相對應的價值為p1,p2.pn pi為整數 求揹包能夠容納的最大價值。include include include include includeusing name...
多重揹包模板 51Nod 1086
有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相對應的價值為p1,p2.pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的種類,w為揹包的容量。1 n 100...
51Nod 1007 01揹包和多重揹包
問題一描述 將一堆正整數劃分為兩組,要求兩組的和相差最小並輸出最小值。sample input51 2345 sample output 1idea 選擇 1 3 5 2 4 1 include include include include includeusing namespace std i...