C# 硬币兑换问题-需要额外的禁品

C# 硬币兑换问题-需要额外的禁品,c#,dynamic,structure,knapsack-problem,C#,Dynamic,Structure,Knapsack Problem,我试图用两个额外的约束条件来改变硬币兑换问题 附加约束#1-硬币只能有2^N的值,其中N=0,1,2。。或任何其他非负整数 附加约束#2-从约束1开始,同一枚硬币最多只能使用2次 到目前为止,我所做的是:- 一,。生成适用于我们希望达到的总和的值列表,其中 对于6,我将生成一个包含[1,2,4]的列表 生成一个列表,其中包含您可以使用特定硬币多少次的值,根据约束条件#2,对于所有情况,这将是2,因此 [1,2,4]的[2,2,2] 我不确定如何组合这两个列表以获得预期的输出。到目前为止,我得到的

我试图用两个额外的约束条件来改变硬币兑换问题

附加约束#1-硬币只能有2^N的值,其中N=0,1,2。。或任何其他非负整数

附加约束#2-从约束1开始,同一枚硬币最多只能使用2次

到目前为止,我所做的是:-

一,。生成适用于我们希望达到的总和的值列表,其中

对于6,我将生成一个包含[1,2,4]的列表

  • 生成一个列表,其中包含您可以使用特定硬币多少次的值,根据约束条件#2,对于所有情况,这将是2,因此
  • [1,2,4]的[2,2,2]

    我不确定如何组合这两个列表以获得预期的输出。到目前为止,我得到的是:-

    static int Ways(List<int> coins, List<int> coins_used,  int sum)
    {
        int[] no_of_ways = new int[sum + 1]; 
        results[0] = 1;
        for (int i = 0; i < coins.Count; i++)
            for (int times = 0; times < coins_used[i]; times++) // I want to make sure that we use one value only up to 2 times
                for (int j = coins[i]; j <= sum; j++)
                    no_of_ways[j] += no_of_ways[j - times*coins[i]];
        return no_of_ways[sum];
    }
    
    静态整数方式(列出硬币、列出使用的硬币、整数和)
    {
    int[]no_of_ways=新的int[sum+1];
    结果[0]=1;
    对于(int i=0;i