硬币找零问题-需要协助以及其他限制

时间:2019-09-04 20:37:52

标签: c# dynamic structure knapsack-problem

我正在尝试通过2个其他约束来解决硬币找零问题。

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

附加约束2-您只能将相同硬币从约束1最多使用2次

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

1。生成适用于我们希望达到的总和的值列表,所以

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

  1. 根据约束2,生成一个包含可以使用特定硬币多少次的值的列表,对于所有情况,该值为2,因此,

[2,2,2]表示[1,2,4]。

我不确定我应该如何合并这两个列表以获取预期的输出。到目前为止,我有:-

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];
}

预期结果:-对于sum = 6,该函数应返回3,因为我们可以用3种不同的方式表示6,即{1,1,4},{1,1,2,2},{2,4 }

实际结果:该函数返回17

0 个答案:

没有答案