当前位置: 首页 > 编程笔记 >

C中的0-1背包问题?

程景胜
2023-03-14
本文向大家介绍C中的0-1背包问题?,包括了C中的0-1背包问题?的使用技巧和注意事项,需要的朋友参考一下

背包是袋子。背包问题是根据物品的值将物品放入袋中的。目的是使袋子内的值最大化。在0-1背包中,您既可以放置物品也可以将其丢弃,没有将物品的某些部分放入背包的概念。

样本问题

Value of items = {20, 25,40}
Weights of items = {25, 20, 30}
Capacity of the bag = 50

重量分布

25,20{1,2}
20,30 {2,3}
If we use {1,3} the weight will be above the max allowed value.
For {1,2} : weight= 20+25=45 Value = 20+25 = 45
For {2,3}: weight=20+30=50 Value = 25+40=65

最大值为65,因此我们将项目2和3放入背包。

0-1背包问题计划

#include<stdio.h>
int max(int a, int b) {
   if(a>b){
      return a;
   } else {
      return b;
   }
}
int knapsack(int W, int wt[], int val[], int n) {
   int i, w;
   int knap[n+1][W+1];
   for (i = 0; i <= n; i++) {
      for (w = 0; w <= W; w++) {
         if (i==0 || w==0)
            knap[i][w] = 0;
         else if (wt[i-1] <= w)
            knap[i][w] = max(val[i-1] + knap[i-1][w-wt[i-1]], knap[i-1][w]);
         else
            knap[i][w] = knap[i-1][w];
      }
   }
   return knap[n][W];
}
int main() {
   int val[] = {20, 25, 40};
   int wt[] = {25, 20, 30};
   int W = 50;
   int n = sizeof(val)/sizeof(val[0]);
   printf("The solution is : %d", knapsack(W, wt, val, n));
   return 0;
}

输出结果

The solution is : 65
 类似资料:
  • 本文向大家介绍解决0-1背包问题的C ++程序,包括了解决0-1背包问题的C ++程序的使用技巧和注意事项,需要的朋友参考一下 在0-1背包问题中,给出了一组项目,每个项目都有一个权重和一个值。我们需要确定要包含在集合中的每个项目的数量,以使总重量小于或等于给定的限制,并且总值尽可能大。 输入项 输出结果 算法 范例程式码 输出结果

  • 我对这个问题有点困惑。作为算法帮助我找到最大的利润从袋。但是这个算法并没有告诉我我应该拿哪一个项目会让我的利润最大。例如 n=4项,背包的容量M=8,利润=[15,10,9,5],重量分别为w=[1,5,3,4],当我解决这个问题时,我得到最大的利润为29 这里是解决方案[http://www.mafy.lut.fi/study/DiscreteOpt/DYNKNAP.pdf] 但是我想知道我应该

  • 本文向大家介绍0/1背包在C ++中使用Branch and Bound,包括了0/1背包在C ++中使用Branch and Bound的使用技巧和注意事项,需要的朋友参考一下 想法是实现以下事实:贪婪方法为分数阶背包问题提供了最佳解决方案。 为了检查特定节点是否可以为我们提供更好的解决方案,我们计算(通过节点)实施贪婪方法的最佳解决方案。如果用Greedy方法计算出的解本身不是迄今为止最好的解

  • 我写了一个背包类,我用它来解决背包算法。这个类正在使用动态规划算法来解决这个问题。 我在代码中实现了一些优化,因此我使用线性O(W)空间来找到最大值,但当我试图找到见证时,我仍然需要O(nW)空间来保持布尔表。 有人能告诉我,是否有可能找到背包容量最大、空间较小、复杂度与O(nW)相同的证据,这里W是背包容量。 如果您认为代码中可能还有更多优化,请也告诉他们。

  • 本文向大家介绍C#使用动态规划解决0-1背包问题实例分析,包括了C#使用动态规划解决0-1背包问题实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用动态规划解决0-1背包问题的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我目前正在研究一个路由问题(找到一个我想去的地方的子集[每个地方有一定的分数],同时不超过最大的旅行时间),并提出了1/0背包问题的变体,似乎解决了我最初的问题。 根据维基百科,1/0背包被描述为: 给定一组物品,每个物品都有质量和价值,确定集合中每个物品的数量,以便总重量小于或等于给定的限制,总价值尽可能大。 因此,对于每个项目,都有一个固定的重量(质量),当试图解决问题时,可以很容易地使用它,