动态规划之多重背包
有n件物品和容量为m的背包,给出i件物品的重量以及价值,还有数量,求解让装入背包的物品重量不超过背包容量且价值最大。
特点:它与完全背包有类似点,特点是每个物品都有了一定的数量。
示例代码
#include<iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int a[10001],b[10001],c[10001];
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>c[i];
}
int f[10001];
for(int i=1;i<=n;i++)
for(int j=m;j>=0;j--)
for(int k=0;k<=c[i];k++){
if(j-k*a[i]<0)break;
f[j]=max(f[j],f[j-k*a[i]]+k*b[i]);
}
cout<<f[m]<<endl;
}