首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从背包中检索项[一维数组实现]

从背包中检索项[一维数组实现]
EN

Stack Overflow用户
提问于 2014-03-07 09:37:51
回答 1查看 609关注 0票数 3

这个算法在Are these 2 knapsack algorithms the same? (Do they always output the same thing)上运行良好。

我们如何检索流程中选择的项目?

这是上一篇文章中的算法

代码语言:javascript
运行
复制
for (int j = 0; j < N; j++) {
    if (C-w[j] < 0) continue;
    for (int i = C-w[j]; i >= 0; --i) { //loop backwards to prevent double counting
        dp[i + w[j]] = max(dp[i + w[j]], dp[i] + v[j]); //looping fwd is for the unbounded problem
    }
}
printf( "max value without double counting (loop backwards) %d\n", dp[C]);

这是一个示例:

代码语言:javascript
运行
复制
For C = 9 and N = 3

Values and Weights: 
5 4
6 5
3 2

背包数组如下:

代码语言:javascript
运行
复制
0 0 3 3 5 6 8 9 9 11 

它通过选择项目1和项目2给出了最佳值= 11

如何检索所选项目?或者如何知道我们选择了哪些项目?项目1和项目2

添加另一个示例:

代码语言:javascript
运行
复制
weight: 16 19 23 28
value: 2 3 4 5
C = 7

迭代1

代码语言:javascript
运行
复制
0 16 16 16 16 16 16

迭代2

代码语言:javascript
运行
复制
0 16 19 19 35 35 35

迭代3

代码语言:javascript
运行
复制
0 16 19 23 35 39 42

迭代4

代码语言:javascript
运行
复制
0 16 19 28 35 39 44

对于第1项和第4项,最佳值= 44

EN

回答 1

Stack Overflow用户

发布于 2014-03-07 14:32:01

只需通过检查刚找到的解决方案是否比之前看到的任何解决方案更好来替换您的最大调用。如果是这样的话,就把它保存起来,以便以后参考。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22239802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档