使用C ++中允许重复的数组元素求和N的方法

在这个问题中,我们得到了一个由整数和数字N组成的数组。我们的任务是计算通过添加数组元素可以生成N的方法总数。允许所有组合和重复。

让我们举个例子来了解这个问题,

输入项

arr = {1, 3, 5} N = 6

输出结果

8

说明

的方式是-

5+1, 1+5, 3+3, 3+1+1+1, 1+3+1+1, 1+1+3+1, 1+1+1+3, 1+1+1+1+1+1

为了解决这个问题,我们需要使用不同的方法,因为所有类型的组合都将得到不同的对待,因此,如果数量是数组4个元素的总和,则可以考虑4种不同的方式(如示例所示)。为了解决这个问题,我们需要使用动态编程方法,下面的程序将展示实现。

示例

#include <iostream>

#include <cstring>

using namespace std;

int arraySumWays(int array[], int size, int N){

   int count[N + 1];

   memset(count, 0, sizeof(count));

   count[0] = 1;

   for (int i = 1; i <= N; i++)

      for (int j = 0; j < size; j++)

         if (i >= array[j])

            count[i] += count[i - array[j]];

   return count[N];

}

int main() {

   int array[] = {1, 5, 6};

   int size = sizeof(array) / sizeof(array[0]);

   int N = 7;

   cout<<"Total number of ways inwhich "<<N<<" can be generated using sum of elements of array is "      <<arraySumWays(array, size, N);

   return 0;

}

输出结果

Total number of ways inwhich 7 can be generated using sum of elements of array is 6

以上是 使用C ++中允许重复的数组元素求和N的方法 的全部内容, 来源链接: utcz.com/z/352495.html

回到顶部