当前位置: 首页 > 知识库问答 >
问题:

试图找出经典背包循环

梁丘诚
2023-03-14

我正在阅读背包问题(无界),正如我所理解的DP中的经典。
虽然我认为我在阅读时理解了解决方案,但我不清楚如何将其翻译为实际代码。
例如在以下递归“公式”中:

<代码>M(j)=MAX{M(j-1), MAX i=1 to n(M(j-Si)Vi)}for j

我不确定如何将其翻译成代码,因为我不清楚内部MAX应该在那里还是应该在那里:
M(j)=MAX{M(j-1), M(j-Si)Vi}代表j


共有1个答案

宋伯寅
2023-03-14

您可以这样编码:

for w = 0 to W   //W is the maximum capacity
V[0,w] = 0
for i = 1 to n
V[i,0] = 0
for i = 1 to n
for w = 0 to W
    if wi <= w // item i can be part of the solution
        if  bi + V[i-1,w-wi] > V[i-1,w]
            V[i,w] = bi + V[i-1,w- wi]
        else
            V[i,w] = V[i-1,w]
    else V[i,w] = V[i-1,w]  // wi > w 

这意味着以下内容:

这意味着,总权重w的Sk的最佳子集是:

1) 具有总权重的Sk-1的最佳子集

2)具有总权重的SK-1的最佳子集

具有总重量的Sk的最佳子集

第一种情况:wk

第二种情况:wk

 类似资料:
  • 本文向大家介绍C#用递归算法解决经典背包问题,包括了C#用递归算法解决经典背包问题的使用技巧和注意事项,需要的朋友参考一下 1.引子   我们人类是一种贪婪的动物,如果给您一个容量一定的背包和一些大小不一的物品,裝到背包里面的物品就归您,遇到这种好事大家一定不会错过,用力塞不一定是最好的办法,用脑子才行,下面就教您如何解决这样的问题,以获得更多的奖品。 2.应用场景   在一个物品向量中找到一个子

  • 问题指出该方法(公共静态int Sum(int[]输入)应该采用一个int数组,并对输入数据X执行以下数学运算。 这是我的代码,我需要知道我的问题是否正确。

  • 我试图找到CH34xAndroidDriver的时间和地点。isConnected()值变为true。我试着在祝酒词中发现并展示它的价值。有人能解释清楚吗。 直到第74行(Toast.makeText(global\u context,“155k”((Boolean)uartInterface.isConnected()),Toast.LENGTH\u SHORT)。show();)我发现它返回f

  • 本文向大家介绍5个JavaScript经典面试题,包括了5个JavaScript经典面试题的使用技巧和注意事项,需要的朋友参考一下 1:Scope作用范围 什么会被打印在控制台上? 回答 上面的代码会打印 5。 这个问题的诀窍是,这里有两个变量声明,但 a 使用关键字var声明的。代表它是一个函数的局部变量。与此相反,b 变成了全局变量。 这个问题的另一个诀窍是,它没有使用严格模式 (‘use s

  • 燕儿不以为然地撇撇嘴:“等你有钱了,你以为你不会去追求。” 俗话说五十步笑百步,绝影这话一出口,自己就不好意思起来,他这正是一百步还来笑五十步。如果说比尔盖茨拿这话来教训年轻人,尤不失下曹从事,说不定还会被各大媒体引经据典转载,网站、论坛、邮件处处拿这话来强奸你的耳朵。问题是现在他什么也没有,就在这里指手画脚实在有点给人吃不到葡萄说葡萄是酸的感觉。 所以明明道理都是一样的,说的人不同了,效果也不一

  • 大家是否感觉到,树在数据结构中大行其道,什么领域都要沾一沾,碰一碰。 就拿我们前几天学过的排序就用到了堆和今天讲的”二叉排序树“,所以偏激的说,掌握的树你就是牛人了。 今天就聊聊这个”五大经典查找“中的最后一个”二叉排序树“。 1. 概念: <1> 其实很简单,若根节点有左子树,则左子树的所有节点都比根节点小。 若根节点有右子树,则右子树的所有节点都比根节点大。 <2> 如图就是一个”二叉排序树“