Given a set of m distinct positive integers and a value ‘N’. The problem is to count the total number of ways we can form ‘N’ by doing sum of the array elements. Repetitions and different arrangements are allowed.
Examples :
Input: arr = {1, 5, 6}, N = 7
Output: 6
Explanation: The different ways are:
1+1+1+1+1+1+1
1+1+5
1+5+1
5+1+1
1+6
6+1Input: arr = {12, 3, 1, 9}, N = 14
Output: 150
Approach: The approach is based on the concept of dynamic programming.
countWays(arr, m, N) Declare and initialize count[N + 1] = {0} count[0] = 1 for i = 1 to N for j = 0 to m - 1 if i >= arr[j] count[i] += count[i - arr[j]] return count[N]
Below is the implementation of the above approach.
// C++ implementation to count ways // to sum up to a given value N #include <bits/stdc++.h> using namespace std;
// function to count the total // number of ways to sum up to 'N' int countWays( int arr[], int m, int N)
{ int count[N + 1];
memset (count, 0, sizeof (count));
// base case
count[0] = 1;
// count ways for all values up
// to 'N' and store the result
for ( int i = 1; i <= N; i++)
for ( int j = 0; j < m; j++)
// if i >= arr[j] then
// accumulate count for value 'i' as
// ways to form value 'i-arr[j]'
if (i >= arr[j])
count[i] += count[i - arr[j]];
// required number of ways
return count[N];
} // Driver code int main()
{ int arr[] = {1, 5, 6};
int m = sizeof (arr) / sizeof (arr[0]);
int N = 7;
cout << "Total number of ways = "
<< countWays(arr, m, N);
return 0;
} |
// Java implementation to count ways // to sum up to a given value N class Gfg
{ static int arr[] = { 1 , 5 , 6 };
// method to count the total number
// of ways to sum up to 'N'
static int countWays( int N)
{
int count[] = new int [N + 1 ];
// base case
count[ 0 ] = 1 ;
// count ways for all values up
// to 'N' and store the result
for ( int i = 1 ; i <= N; i++)
for ( int j = 0 ; j < arr.length; j++)
// if i >= arr[j] then
// accumulate count for value 'i' as
// ways to form value 'i-arr[j]'
if (i >= arr[j])
count[i] += count[i - arr[j]];
// required number of ways
return count[N];
}
// Driver code
public static void main(String[] args)
{
int N = 7 ;
System.out.println( "Total number of ways = "
+ countWays(N));
}
} |
# Python3 implementation to count # ways to sum up to a given value N # Function to count the total # number of ways to sum up to 'N' def countWays(arr, m, N):
count = [ 0 for i in range (N + 1 )]
# base case
count[ 0 ] = 1
# Count ways for all values up
# to 'N' and store the result
for i in range ( 1 , N + 1 ):
for j in range (m):
# if i >= arr[j] then
# accumulate count for value 'i' as
# ways to form value 'i-arr[j]'
if (i > = arr[j]):
count[i] + = count[i - arr[j]]
# required number of ways
return count[N]
# Driver Code arr = [ 1 , 5 , 6 ]
m = len (arr)
N = 7
print ( "Total number of ways = " ,
countWays(arr, m, N))
# This code is contributed by Anant Agarwal. |
// C# implementation to count ways // to sum up to a given value N using System;
class Gfg
{ static int []arr = {1, 5, 6};
// method to count the total number
// of ways to sum up to 'N'
static int countWays( int N)
{
int []count = new int [N+1];
// base case
count[0] = 1;
// count ways for all values up
// to 'N' and store the result
for ( int i = 1; i <= N; i++)
for ( int j = 0; j < arr.Length; j++)
// if i >= arr[j] then
// accumulate count for value 'i' as
// ways to form value 'i-arr[j]'
if (i >= arr[j])
count[i] += count[i - arr[j]];
// required number of ways
return count[N];
}
// Driver code
public static void Main()
{
int N = 7;
Console.Write( "Total number of ways = "
+ countWays(N));
}
} //This code is contributed by nitin mittal. |
<?php // PHP implementation to count ways // to sum up to a given value N // function to count the total // number of ways to sum up to 'N' function countWays( $arr , $m , $N )
{ $count = array_fill (0, $N + 1,0);
// base case
$count [0] = 1;
// count ways for all values up
// to 'N' and store the result
for ( $i = 1; $i <= $N ; $i ++)
for ( $j = 0; $j < $m ; $j ++)
// if i >= arr[j] then
// accumulate count for value 'i' as
// ways to form value 'i-arr[j]'
if ( $i >= $arr [ $j ])
$count [ $i ] += $count [ $i - $arr [ $j ]];
// required number of ways
return $count [ $N ];
} // Driver code $arr = array (1, 5, 6);
$m = count ( $arr );
$N = 7;
echo "Total number of ways = " ,countWays( $arr , $m , $N );
// This code is contributed by Ryuga ?> |
<script> // JavaScript implementation to count ways
// to sum up to a given value N
let arr = [1, 5, 6];
// method to count the total number
// of ways to sum up to 'N'
function countWays(N)
{
let count = new Array(N+1);
count.fill(0);
// base case
count[0] = 1;
// count ways for all values up
// to 'N' and store the result
for (let i = 1; i <= N; i++)
for (let j = 0; j < arr.length; j++)
// if i >= arr[j] then
// accumulate count for value 'i' as
// ways to form value 'i-arr[j]'
if (i >= arr[j])
count[i] += count[i - arr[j]];
// required number of ways
return count[N];
}
let N = 7;
document.write( "Total number of ways = " + countWays(N));
</script> |
Total number of ways = 6
Time Complexity: O(N*m)
Auxiliary Space: O(N), as an additional array of size (N + 1) is required.