#define kProductNum 12
void knapsackProblem(){
int value[] = {0,10000,2000,2550,2900,500,4000,3000,22000,5894,2455,5885};
int weight[] = {0,1,3,4,5,1,2,3,1,3,1,2};
int v[kProductNum][kProductNum] = {0};
int path[kProductNum][kProductNum] = {0};
for (int i = 0; i < kProductNum; i++) {
v[0][i] = 0;
v[i][0] = 0;
}
for (int column = 1; column < kProductNum; column++) {
for (int row = 1; row < kProductNum; row++) {
if (column < weight[row]) {
v[row][column] = v[row - 1][column];
}else{
if (v[row - 1][column] > value[row] + v[row - 1][column - weight[row]]) {
v[row][column] = v[row - 1][column];
}else{
v[row][column] = value[row] + v[row - 1][column - weight[row]];
path[row][column] = 1;
}
}
}
}
for (int row = 0; row < kProductNum; row++) {
for (int column = 0; column < kProductNum; column++) {
printf(" %d ",v[row][column]);
}
printf("\n");
}
NSLog(@"================");
int row = kProductNum - 1;
int column = kProductNum - 1;
while (row > 0 && column > 0) {
if (path[row][column] == 1) {
NSLog(@" 第%d个物品放入 value:%d ",row,value[row]);
column = column - weight[row];
}
row--;
}
背包问题(0~1)
最新推荐文章于 2025-06-02 20:28:45 发布
本文介绍了一个背包问题的经典解决方法,通过使用二维数组记录价值和路径选择情况,实现了在给定容量限制下获得最大价值的物品组合。代码示例中定义了物品的价值与重量,并展示了如何递归地找到最优解。
4万+

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



