int main(){
int n,m;
int result[100][100];
int weight[100],value[100];
//物品数量,背包容量
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
//第i个物品重量和价值
scanf("%d%d",&weight[i],&value[i]);
}
for(int i=0;i<=n;i++){
result[i][0]=0;
}
for(int j=0;j<m;j++){
result[0][j]=0;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
//如果j装不下第i个物品,那么装不装第i个物品价值是一样的
if(j<weight[i]){
result[i][j]=result[i-1][j];
}else{
//只有j>=weight的时候才能装下这个物品,
//比较装与不装这个物品时的价值
result[i][j]=max(result[i-1][j],result[i-1][j-weight[i]]+value[i]);
//完全背包,每件物品可以有无穷件
//result[i][j]=max(result[i-1][j],result[i][j-weight[i]]+value[i]);
}
}
}
cout<<result[n][m];
return 0;
}
01-18
251
07-18
07-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交