首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现背包算法,其中数组的索引表示项的权重

如何实现背包算法,其中数组的索引表示项的权重
EN

Stack Overflow用户
提问于 2015-07-10 23:26:36
回答 2查看 138关注 0票数 0

我正在尝试实现一个算法来解决Knapsack problem

代码语言:javascript
复制
cst = 1;

for (j = 0; j < 200; j++) {
    if (kk - cst < 0) {
        continue;
        cst++;
    }

    for (i = kk - cst; i >= 0; --i) {
        C[i + cst] = max(C[i + cst], C[i] + index[cst]);
    }
    cst++;
}

index数组具有由数组的索引表示的各个项的值。我想知道我哪里错了。

EN

回答 2

Stack Overflow用户

发布于 2015-07-10 23:28:24

在代码中

代码语言:javascript
复制
if(kk-cst < 0)
        {
            continue;
            cst++;
        }

是错误的。cst++将永远不会被执行。请检查并相应地更改您的逻辑。

票数 1
EN

Stack Overflow用户

发布于 2015-07-10 23:31:19

在这里,cst的增量是不可达的代码。调换这两行

代码语言:javascript
复制
if (kk - cst < 0) {
    cst++;
    continue;
}

一个简单的动态编程背包实现是

代码语言:javascript
复制
int KnapSack(int W, int wt[], int val[], int n) {
   int i, w;
   int K[n + 1][W + 1];
   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)
                 K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
           else K[i][w] = K[i - 1][w];
       }
   }
   return K[n][W];
}

http://www.geeksforgeeks.org/dynamic-programming-set-10-0-1-knapsack-problem/中所列

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

https://stackoverflow.com/questions/31344609

复制
相关文章

相似问题

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