正在获取背包DP矩阵中所选项目的列表
Getting list of selected items in Knapsack DP matrix
我尝试过实现堆栈溢出应答解决方案。但它不起作用。
测试用例:
int val[] = {10,40,30,50};
int wt[] = {5,4,6,3};
W = 10;
输出KNAPSACK DP矩阵:
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 5 5 5 5 5 5
0 0 0 0 4 5 5 5 5 9 9
0 0 0 0 4 5 6 6 6 9 10
0 0 0 3 4 5 6 7 8 9 10
可以达到的重量是:10
所选项目的重量总和:11(错误应仅为10(
选择->6(第三项(和5(第一项([这是错误的]
int knapSack(int W, int wt[], int val[], int n)
{
int i, w;
int K[n+1][W+1];
int picks[n+1][W+1] = {0};
// Build table K[][] in bottom up manner
for (i = 0; i <= n; i++)
{
for (w = 0; w <= W; w++)
{
if (i==0 || w==0)
K[i][w] = 0;
else if (wt[i-1] <= w){
//val[i-1 ] is value of curr i
K[i][w] = max(wt[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]);
if (val[i-1]+K[i-1][w-wt[i-1]] > K[i-1][w]){
picks[i][w]=1;
}
else
picks[i][w]=-1;
}
else{
// wt of individual is > limit
picks[i][w] = -1;
K[i][w] = K[i-1][w];
}
}
}
}
为了打印拾取的元素,我使用
while (w > 0 && i > 0 ){
if ((K[i][w] - K[i-1][w-wt[i-1]]) == wt[i-1]){
weight += wt[i-1];
i = i - 1;
w = w - wt[i-1];
}
else{
i = i - 1;
}
}
w = w - wt[i-1]
实际上是
w = w - wt[i-2]
因为i=i-1是在它之前计算的。下面的代码现在可以工作了。
weight += wt[i-1];
i = i - 1;
w = w - wt[i] ;
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- C++项目编译强制使用 /clr 选项,尽管在没有公共语言运行时支持的情况下执行它
- 暂时将C++项目(VS2015)移至Android操作系统.编译器选项?
- 是否有任何 MSBuild 命令行选项可以动态禁用 c++ 项目的代码分析?
- 用于在 Visual Studio 中为整个项目或解决方案定义带有参数的预处理器宏的选项
- 如何将cacert.pem与vs2015 curl项目一起包含,因此无需指定Cainfo curl选项
- Visual Lint?中的每个项目选项
- C++:使用 g++ 和 -m32 选项构建的 c++ 库在 Msys 下构建 wxWidgets 项目时出现 ld 不
- 如何在 eclipse makefile 项目中的编译器选项中设置 -std=c++0x
- 无法使项目,无法识别的命令行选项libc ++错误
- 将cmake构建选项导出到外部项目
- 为什么c++透视图和新项目选项在Eclipse中不可用
- 4.9.9.2项目选项不工作
- 无法使用/ CLR选项从Visual c++项目加载CLR
- 如何将code::块设置为在目标链接器选项之前链接项目链接器选项
- 可以qmake-configure Visual Studio项目中的命令行选项
- 在我的项目中使用预编译的头(clang/llvm,但也使用gcc).如何在make中部署-include选项
- 从下拉框中选择其他项目时更改选项卡小部件的 currentIndex()
- 使用 /Command 选项从命令行为 Visual Studio C++ 项目创建一个新文件
- 向Eclipse CDT Autotools项目添加链接器选项