题目描述
现有N种(N<=10)魔法石和一个容量为V(0<V<200)的背包。第i种魔法石最多有n[i]件可用,每个占用的空间是c[i],价值是w[i]。全部物品总数不超过50.求解将哪些魔法石装入背包可使这些物品的容量总和不超过背包容量,且价值总和最大
输入描述
第一行为两个数字,即V和N。以下N行为每种物品的空间,价值和数量
输出描述
最大价值总和
样例
输入
8 2 2 100 4 4 100 2
输出
400
代码
#include<iostream>
using namespace std;
int m,n,a[205],w[205],c[205],n1[205];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++) cin>>w[i]>>c[i]>>n1[i];
a[0]=0;
for(int i=1;i<=n;i++){
for(int j=m;j>=w[i];j--){
for(int k=1;k*w[i]<=j&&k<=n1[i];k++){
a[j]=max(a[j-k*w[i]]+k*c[i],a[j]);
}
}
}
cout<<a[m];
return 0;
}
1379

被折叠的 条评论
为什么被折叠?



