#include <stdio.h>
int main(){
int bagsize,num; //背包容量、物品数量
scanf("%d %d",&bagsize,&num);
getchar();
int value[num],weight[num]; //每个物品的价值、重量
for(int i=0;i<num;i++){
scanf("%d %d",&value[i],&weight[i]);
getchar();
}
int table[num+1][bagsize+1]; //列出求解表格。为了方便计算,将第一行和第一列设为0
for(int i=0;i<num+1;i++){
table[i][0]=0;
}
for(int i=0;i<bagsize+1;i++){
table[0][i]=0;
}
for(int i=1;i<num+1;i++){
for(int j=1;j<bagsize+1;j++){
int with=(j-weight[i-1]>=0)?(value[i-1]+table[i-1][j-weight[i-1]]):0;
int without=table[i-1][j];
table[i][j]=(with>without)?with:without;
}
}
/*for(int i=0;i<num+1;i++){
for(int j=0;j<bagsize+1;j++){
printf("%d ",table[i][j]);
}
printf("\n");
}*/
printf("%d",table[num][bagsize]); //输出求解表格最后一项即可
return 0;
}
//参考资料:https://www.cnblogs.com/kkbill/p/12081172.html
// https://blog.youkuaiyun.com/qq_37767455/article/details/99086678
C语言 01背包问题
最新推荐文章于 2022-04-01 15:50:33 发布
本文详细介绍了如何使用C语言解决经典的计算机科学问题——01背包问题。通过动态规划算法,探讨如何在限定的容量内选择物品以最大化总价值,并提供了一段C语言代码示例进行演示。
621

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



