Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
C# 使用提供的度量单位以最小超期拟合目标和的算法_C#_Algorithm_Knapsack Problem_Bin Packing_Coin Change - Fatal编程技术网

C# 使用提供的度量单位以最小超期拟合目标和的算法

C# 使用提供的度量单位以最小超期拟合目标和的算法,c#,algorithm,knapsack-problem,bin-packing,coin-change,C#,Algorithm,Knapsack Problem,Bin Packing,Coin Change,以下是一个例子: 客户订购一件物品的57件单品。这家公司只在国内销售 15和6的单位 该算法必须按照重要性顺序计算出UOM(计量单位)与以下优先级的最佳组合 最低超额额 使用最高度量单位 在本例中,预期结果为列表: {15,15,15,6,6}//sum=57 我研究过“箱子包装”和“背包问题”,但不知道如何在这种情况下应用 到目前为止,我发现这显然不是最好的组合 void Main() { var solver=new solver(); var r=solver.Solve(57,新十进制[

以下是一个例子:

客户订购一件物品的57件单品。这家公司只在国内销售 15和6的单位

该算法必须按照重要性顺序计算出UOM(计量单位)与以下优先级的最佳组合

  • 最低超额额
  • 使用最高度量单位
  • 在本例中,预期结果为
    列表

    {15,15,15,6,6}//sum=57

    我研究过“箱子包装”和“背包问题”,但不知道如何在这种情况下应用

    到目前为止,我发现这显然不是最好的组合

    void Main()
    {
    var solver=new solver();
    var r=solver.Solve(57,新十进制[]{6,15}).Dump();
    }
    公共类求解器
    {
    公开列表结果;
    公共列表求解(十进制目标,十进制[]元素)
    {
    mResults=新列表();
    RSolve(goal,0m,elements,elements.Where(e=>ex.FirstOrDefault());
    返回mResults;
    }
    public void RSolve(十进制目标、十进制currentSum、十进制[]元素、十进制toAdd)
    {
    如果(当前总和>=目标)
    返回;
    currentSum+=toAdd;
    mResults.Add(toAdd);
    var余数=目标-当前总和;
    var nextToAdd=elements.Where(e=>e).FirstOrDefault();
    如果(nextToAdd==0)
    nextToAdd=elements.OrderBy(e=>e).FirstOrDefault();
    RSolve(目标、当前和、元素、下一个添加);
    }
    }
    
    这是的一个实例。可采用动态规划法求解;构建一个数组,其中索引i处的值是可用于总计i的解决方案的最大硬币,或者如果不可能解决方案,则为-1。如果您首先使用较大的单位,那么解决方案将自动满足“最高度量单位”要求;为了满足“最低超龄量”的要求,您可以尝试找到57的解决方案,如果不起作用,请尝试58,以此类推

    运行时间最多为O((n+1-n₀)k) 其中n是要求的总和,n₀ 是缓存中最大的索引,k是度量单位的数量。特别是在尝试57后,最多需要O(k)时间来尝试58,然后最多需要O(k)时间来尝试59,依此类推


    要为求和n构建输出列表,请初始化一个空列表,然后在n>0时将值追加到缓存中的索引n处,并从n中减去该值。

    这是的一个实例。它可以通过动态规划来解决;构建一个数组,其中索引i处的值是可用于求和i的解决方案中的最大硬币,或者如果是-1没有解决方案是可能的。如果您先使用较大的单位,则解决方案将自动满足“最高度量单位”要求;为了满足“最小超龄量”要求,您可以尝试为57找到解决方案,如果不起作用,请尝试58,依此类推

    运行时间最多为O((n+1-n₀)k) 其中n是要求的总和,n₀ 是缓存中最大的索引,k是度量单位的数量。特别是在尝试57后,最多需要O(k)时间来尝试58,然后最多需要O(k)时间来尝试59,依此类推



    要为求和n构建输出列表,请初始化一个空列表,然后在n>0时在缓存中的索引n处追加值,然后从n中减去该值。

    Stackoverflow不是一个代码编写服务,这显然是一个家庭作业辅助。向我们展示您迄今为止所做的工作,以及您遇到的具体问题,我们可以帮助您解决。另外解决方案是加15,直到值+15大于57。然后用大小6重复。十进制是错误的类型,它们显然应该是整数。你可以用2个循环来完成。这就是你所需要的。虽然你可以经常在循环和递归之间切换,但这似乎是一个非常简单的循环情况。没有得到它。答案中的一些示例代码将是great.Stackoverflow不是一个代码编写服务,这显然是一个家庭作业。向我们展示您迄今为止所做的工作,以及您遇到的具体问题,我们可以帮助您解决。解决方案是添加15,直到值+15大于57。然后重复大小6。十进制是错误的类型,它们显然应该是整数。您可以使用有两个循环。这就是你所需要的。虽然你可以经常在循环和递归之间切换,但这似乎是一个非常简单的循环。没有得到它。答案中的一些示例代码会很好。一些类似c语言的代码会很有帮助。@boruchsiper我们不会为家庭作业提供代码。自己编写这些代码是lea的一部分rning。一旦你知道从哪里开始,这真的是难以置信的琐碎。这是两个循环。不是量子物理。对于已经学会如何做的人来说,这是琐碎的;对于正在学习的人来说,这不是琐碎的。但无论如何,你自己尝试是很重要的。
    初始化一个空列表,然后在n>0时附加值在缓存中的索引n处添加e,然后从n中减去该值。
    该值是多少??此外,在索引n处添加值意味着在开始时在索引57处。对于类似c语言的meSome代码来说没有意义将非常有帮助。@Boruchsipper我们不会为家庭作业提供代码。编写该代码是学习的一部分。而且,这是非常重要的一旦你知道从哪里开始,这真的是难以置信的琐碎。它是两个循环。不是量子物理。对于已经学会如何做的人来说,这是琐碎的;对于正在学习的人来说,这不是琐碎的。但无论如何,重要的是你自己尝试。
    初始化一个空列表,然后在n>0时在缓存中追加值在索引n处,从n中减去该值。
    该值是多少??此外,在索引n处添加值意味着在开始时在索引57处。对我来说没有意义