Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 背包(或分割)算法的变化_Algorithm_Optimization_Dynamic Programming_Combinatorics - Fatal编程技术网

Algorithm 背包(或分割)算法的变化

Algorithm 背包(或分割)算法的变化,algorithm,optimization,dynamic-programming,combinatorics,Algorithm,Optimization,Dynamic Programming,Combinatorics,我的问题如下: 给定一个由N个项目组成的队列,每个项目都有一个权重,以及由K个容器组成的队列。我们需要按照物品的顺序将物品分到容器中。例如,第一个项目只能进入第一个容器,第二个项目可以进入第一个或第二个容器,但不能进入第三个容器(否则第二个容器将没有任何项目) 我需要创建并实现一个算法,使某种均匀分布,因此最重的容器必须尽可能轻;给出具有该重量的容器数量 我想这是3-划分或背包问题的一个变种。我已经使用动态规划实现了一种可能的分发解决方案,并尝试从中使用的表中获取计数。但是它不够有效(内存太多太

我的问题如下:

给定一个由N个项目组成的队列,每个项目都有一个权重,以及由K个容器组成的队列。我们需要按照物品的顺序将物品分到容器中。例如,第一个项目只能进入第一个容器,第二个项目可以进入第一个或第二个容器,但不能进入第三个容器(否则第二个容器将没有任何项目)

我需要创建并实现一个算法,使某种均匀分布,因此最重的容器必须尽可能轻;给出具有该重量的容器数量

我想这是3-划分或背包问题的一个变种。我已经使用动态规划实现了一种可能的分发解决方案,并尝试从中使用的表中获取计数。但是它不够有效(内存太多太贵),获取容器数量的算法也不正确


有人能解释一下,哪个算法是这个问题的解决方案吗?

所以OP的问题通常可以通过中给出的DP算法来解决。为了完整起见,我将在这里重复其要点:

假设d[i][j]是问题的解,当我们有项s[1],…,s[i] 和j容器。然后:

  • d[0][j]=每j为0
  • d[i][1]=的和(s[1],…,s[i]) 每一个我

  • d[i][j]=min(max(d[i-t][j-1],和(s[i-t+1],…,s[i])总的来说,1当
    N>K
    时,最后的
    N-K
    项目可以放在任何容器中吗?您的问题是否与该容器有更多的共同点,或者可能更一般?安迪·琼斯,不,每个容器都应该使用,并且应该按顺序使用。因此,我们可以将前3个项目放在第一个容器中,接下来的5到第二个容器中,N-K应该分配不知何故,我在另一个容器之间被忽略了。或者我只是不太明白你的问题。@asQuirreL谢谢,我会读更多关于这个问题的文章。我可能遗漏了一些东西,但你的问题可以改为“”给定一个
    n
    元素数组,我们如何将其划分为
    k
    连续段,从而使任何段的元素的最大和最小化?"因为如果是这样的话,你的问题是a,它给出了一个有效的DP解决方案。或者你在寻找更有效的解决方案吗?谢谢你的回答。据我所知,这个算法为我们提供了关于最大重量的信息。我如何获得关于具有这种重量的集装箱数量的信息?或者我遗漏了什么?完全是为了我知道了,抱歉。在中编辑了一个解决方案。