Dynamic 背包(多标准)

Dynamic 背包(多标准),dynamic,knapsack-problem,Dynamic,Knapsack Problem,如果我有一个背包,重量w有两个值v1和v2,容量是m。在重量不超过容量m的情况下,如何找到v1和v2的总值?好的,因此您的问题定义如下。首先是一些带有示例值的变量定义: int N = 4; // number of items to choose from int m = 6; // maximum weight in knapsack // weight for an item[i] to be summed up, upper limited = m int weight[N] = {5

如果我有一个背包,重量w有两个值v1和v2,容量是m。在重量不超过容量m的情况下,如何找到v1和v2的总值?

好的,因此您的问题定义如下。首先是一些带有示例值的变量定义:

int N = 4; // number of items to choose from
int m = 6; // maximum weight in knapsack

// weight for an item[i] to be summed up, upper limited = m
int weight[N] = {5,2,4,3}; 

// two values for each items:
int values[2][N] = {
  {1,3,5,2},
  {6,3,2,4}
};
背包应装满物品,背包中所有物品的重量总和不得超过m。其中每个项目有2个值。我们可以这样看待这个问题:

我想和我的女朋友乘飞机去度假。我们有一个手提箱=背包和N件物品可供选择。每个项目都有一个重量,重量总和可能不会太高,例如,重量限制空气管线为25 kg,suirecase为1kg,因此我们将m=24 kg作为项目的限制。对于每个项目,我们有2个值。值[1][N]是我在旅行时背包中的物品N的值。值[2][N]是我女朋友的值,她有不同的偏好。我们还假设,每件物品只能放入背包一次,背包的总价值是它们对我的价值之和加上它们对她的价值之和

这个问题可以很容易地转化为标准背包问题,只需将值列表相加即可。因此,一个项目会得到一个总体价值,例如,对于我和她来说,一个项目只有一个价值:

int value[N] = {(1+6),(3+3),(5+2),(2+4)};
或者只是:

int value[N] = {7, 6, 7, 5};
现在每个项目只有一个值。这是正常的背包问题

维基百科上描述了如何以最佳方式解决常见的背包问题。看一看-如果英语不是你的母语,也看一看你的语言版本,从菜单中选择语言


如果您需要进一步的帮助,只需提问。

您的问题没有完全说明。人们可以用多种方式来理解它。是否只有两种类型的物品可以放入重量为w1和w2的背包?也许可以添加一些示例来说明您的意思。项目:1 2 3 4重量:5 2 4 3值1:1 3 5 2值2:6 3 2 4最大容量,m=6。因此,这意味着袋子可以承载等于或小于6的重量。选择第2项和第4项,因此权重=5:因此对于值1=5和值2=7。好的,除了最后一句之外,所有内容都得到了,所以对于值1=5和值2=7;5和7是从哪里来的?明白了。。。它是重量[item1]+value1[item1]和重量[item2]+value2[item2]。对吗?-现在,你想最大化什么?整件事情的重量[item1]+value1[item1]+weight[item2]+value2[item2]??value1=5和value2=7来自:value1=>item[2]的重量+item[4],因为m=6和2+4=6。因此,我们将第[2]项和第[4]项的值添加到值1和2中,我想要一个最佳解决方案。问题如下:项目:1 2 3 4重量:5 2 4 3值1:1 3 5 2值2:6 3 2 4最大容量,m=6。因此,这意味着袋子可以承载等于或小于6的重量。因此,输出应该是这样的:选择项目2和4,因此权重=5:对于值1=5和值2=7。