我正在尝试通过2个其他约束来解决硬币找零问题。
附加约束1-硬币只能具有2 ^ N的值,其中N = 0,1,2 ..或任何其他非负整数
附加约束2-您只能将相同硬币从约束1最多使用2次
到目前为止,我所做的是:-
1。生成适用于我们希望达到的总和的值列表,所以
例如:-对于6,我将生成一个包含[1,2,4]的列表
[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