有 N种物品和一个容量是 V的背包。
第 i 种物品最多有 si件,每件体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。
输入格式
第一行两个整数,N,V用空格隔开,分别表示物品种数和背包容积。
接下来有 N行,每行三个整数 vi,wi,si用空格隔开,分别表示第 i种物品的体积、价值和数量。
输出格式
输出一个整数,表示最大价值。
数据范围
0<N,V≤1000<N,V≤100
0<vi,wi,si≤1000<vi,wi,si≤100
#include <bits/stdc++.h>
using namespace std;
int main(){
int N,V,t=0;
int a[10005],b[10005],value[10005];
cin>>N>>V;
while(N--){
cin>>v>>w>>s;
while(s--){
a[t++]=v;
b[t]=w;
}
}
for(int i=0;i<t;i++)
for(j=V;j>=a[i];j--){
value[j]=max(value[j-a[i]]+b[i],value[j]); //每个容量下的最大值都会被记录,通过不断的比较,来获得最大值;
}
cout<<value[V];
}