Number of non-negative integral solutions of sum equation

31 Dec, 2021
Given a number n (number of variables) and val (sum of the variables), find out how many such non-negative integral solutions are possible. 
Examples : 
Input : n = 5, val = 1
Output : 5
Explanation:
x1 + x2 + x3 + x4 + x5 = 1
Number of possible solution are : 
(0 0 0 0 1), (0 0 0 1 0), (0 0 1 0 0),
(0 1 0 0 0), (1 0 0 0 0)
Total number of possible solutions are 5

Input : n = 5, val = 4
Output : 70
Explanation:
x1 + x2 + x3 + x4 + x5 = 4
Number of possible solution are: 
(1 1 1 1 0), (1 0 1 1 1), (0 1 1 1 1), 
(2 1 0 0 1), (2 2 0 0 0)........ so on......
Total numbers of possible solutions are 70
Asked in: Microsoft Interview 
1. Make a recursive function call to countSolutions(int n, int val) 2. Call this Solution function countSolutions(n-1, val-i) until n = 1 and val >=0 and then return 1.
Below is the implementation of above approach:
C++
Java
Python3
C#
PHP
Javascript
// CPP program to find the numbers// of non negative integral solutions#include<iostream>using namespace std; // return number of non negative// integral solutionsint countSolutions(int n, int val){    // initialize total = 0    int total = 0;     // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >=0)        return 1;     // iterate the loop till equal the val    for (int i = 0; i <= val; i++){                 // total solution of equations        // and again call the recursive        // function Solutions(variable,value)        total += countSolutions(n-1, val-i);             }         // return the total no possible solution    return total;} // driver codeint main(){         int n = 5;    int val = 20;         cout<<countSolutions(n, val);} //This code is contributed by Smitha Dinesh Semwal
// Java program to find the numbers// of non negative integral solutionsclass GFG {   // return number of non negative  // integral solutions  static int countSolutions(int n, int val) {     // initialize total = 0    int total = 0;     // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >= 0)      return 1;     // iterate the loop till equal the val    for (int i = 0; i <= val; i++) {       // total solution of equations      // and again call the recursive      // function Solutions(variable, value)      total += countSolutions(n - 1, val - i);    }     // return the total no possible solution    return total;  }   // Driver code  public static void main(String[] args) {    int n = 5;    int val = 20;     System.out.print(countSolutions(n, val));  }} // This code is contributed by Anant Agarwal.
# Python3 program to find the numbers# of non negative integral solutions # return number of non negative# integral solutionsdef countSolutions(n, val):     # initialize total = 0    total = 0     # Base Case if n = 1 and val >= 0    # then it should return 1    if n == 1 and val >=0:        return 1     # iterate the loop till equal the val    for i in range(val+1):             # total solution of equations        # and again call the recursive        # function Solutions(variable,value)        total += countSolutions(n-1, val-i)     # return the total no possible solution    return total # driver coden = 5val = 20print(countSolutions(n, val))
// C# program to find the numbers// of non negative integral solutionsusing System; class GFG {     // return number of non negative    // integral solutions    static int countSolutions(int n, int val) {             // initialize total = 0        int total = 0;             // Base Case if n = 1 and val >= 0        // then it should return 1        if (n == 1 && val >= 0)        return 1;             // iterate the loop till equal the val        for (int i = 0; i <= val; i++) {                     // total solution of equations            // and again call the recursive            // function Solutions(variable, value)            total += countSolutions(n - 1, val - i);        }             // return the total no possible solution        return total;    }         // Driver code    public static void Main()    {        int n = 5;        int val = 20;             Console.WriteLine(countSolutions(n, val));    }} // This code is contributed by Anant vt_m.
<?php// PHP program to find the numbers// of non negative integral solutions // return number of non negative// integral solutionsfunction countSolutions($n, $val){    // initialize total = 0    $total = 0;     // Base Case if n = 1 and    // val >= 0 then it should    // return 1    if ($n == 1 && $val >=0)        return 1;     // iterate the loop    // till equal the val    for ($i = 0; $i <= $val; $i++)    {                 // total solution of equations        // and again call the recursive        // function Solutions(variable,value)        $total += countSolutions($n - 1,                                 $val - $i);             }         // return the total    // no possible solution    return $total;} // Driver Code$n = 5;$val = 20; echo countSolutions($n, $val); // This code is contributed by nitin mittal.?>
<script> // JavaScript program to find the numbers// of non negative integral solutions   // return number of non negative  // integral solutions  function countSolutions(n, val) {       // initialize total = 0    let total = 0;       // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >= 0)      return 1;       // iterate the loop till equal the val    for (let i = 0; i <= val; i++) {         // total solution of equations      // and again call the recursive      // function Solutions(variable, value)      total += countSolutions(n - 1, val - i);    }       // return the total no possible solution    return total;  } // Driver code                 let n = 5;        let val = 20;       document.write(countSolutions(n, val));         </script>
Output : 
10626
Dynamic Programming Approach:
(Using Memoization)
C++
Java
Python3
C#
Javascript
// CPP program to find the numbers// of non negative integral solutions#include<bits/stdc++.h>using namespace std; int dp[1001][1001]; // return number of non negative// integral solutionsint countSolutions(int n, int val){    // initialize total = 0    int total = 0;     // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >=0) {        return 1;    }       // If a value already present in dp,    // return it    if(dp[n][val] != -1) {        return dp[n][val];    }         // iterate the loop till equal the val    for (int i = 0; i <= val; i++){                 // total solution of equations        // and again call the recursive        // function Solutions(variable,value)        total += countSolutions(n-1, val-i);             }         // Store the value in dp    dp[n][val] = total;         // Return dp    return dp[n][val];} // driver codeint main(){         int n = 5;    int val = 20;         memset(dp, -1, sizeof(dp));         cout << countSolutions(n, val);}
// Java program to find the numbers// of non negative integral solutionsimport java.util.*;public class GFG{  static int dp[][] = new int[1001][1001];   // return number of non negative  // integral solutions  static int countSolutions(int n, int val)  {    // initialize total = 0    int total = 0;     // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >=0) {      return 1;    }     // If a value already present in dp,    // return it    if(dp[n][val] != -1) {      return dp[n][val];    }     // iterate the loop till equal the val    for (int i = 0; i <= val; i++){       // total solution of equations      // and again call the recursive      // function Solutions(variable,value)      total += countSolutions(n-1, val-i);     }     // Store the value in dp    dp[n][val] = total;     // Return dp    return dp[n][val];  }   // driver code  public static void main(String args[]){     int n = 5;    int val = 20;     for(int i = 0; i < 1001; i++) {      for(int j = 0; j < 1001; j++) {        dp[i][j]=-1;      }    }     System.out.println(countSolutions(n, val));  }} // This code is contributed by Samim Hossain Mondal.
# Python3 program to find the numbers# of non negative integral solutions # Taking the matrix as globallydp = [[-1 for i in range(1001)]          for j in range(1001)] # Return number of non negative# integral solutionsdef countSolutions(n, val):     # Initialize total = 0    total = 0     # Base Case if n = 1 and val >= 0    # then it should return 1    if n == 1 and val >= 0:        return 1         # If a value is already present    # in dp    if (dp[n][val] != -1):        return dp[n][val]         # Iterate the loop till equal the val    for i in range(val + 1):             # total solution of equations        # and again call the recursive        # function Solutions(variable,value)        total += countSolutions(n - 1, val - i)     # Return the total no possible solution    dp[n][val] = total    return dp[n][val] # Driver coden = 5val = 20 print(countSolutions(n, val)) # This code is contributed by Samim Hossain Mondal.
// C# program to find the numbers// of non negative integral solutionsusing System;class GFG{  static int [,]dp = new int[1001, 1001];   // return number of non negative  // integral solutions  static int countSolutions(int n, int val)  {    // initialize total = 0    int total = 0;     // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >=0) {      return 1;    }     // If a value already present in dp,    // return it    if(dp[n, val] != -1) {      return dp[n, val];    }     // iterate the loop till equal the val    for (int i = 0; i <= val; i++){       // total solution of equations      // and again call the recursive      // function Solutions(variable,value)      total += countSolutions(n-1, val-i);     }     // Store the value in dp    dp[n, val] = total;     // Return dp    return dp[n, val];  }   // driver code  public static void Main(){     int n = 5;    int val = 20;     for(int i = 0; i < 1001; i++) {      for(int j = 0; j < 1001; j++) {        dp[i, j] = -1;      }    }     Console.Write(countSolutions(n, val));  }} // This code is contributed by Samim Hossain Mondal.
<script>// JavaScript program to find the numbers// of non negative integral solutions  var dp = new Array(1001);     // Loop to create 2D array using 1D array  for (var i = 0; i < dp.length; i++) {      dp[i] = new Array(1001);  }     // return number of non negative  // integral solutions  function countSolutions(n, val) {       // initialize total = 0    let total = 0;       // Base Case if n = 1 and val >= 0    // then it should return 1    if (n == 1 && val >= 0)      return 1;         // if a value is already    // present in dp    if(dp[n][val] != -1)        return dp[n][val];         // iterate the loop till equal the val    for (let i = 0; i <= val; i++) {         // total solution of equations      // and again call the recursive      // function Solutions(variable, value)      total += countSolutions(n - 1, val - i);    }       // return the total no possible solution    return dp[n][val] = total;  } // Driver codelet n = 5;let val = 20; for(let i = 0; i < 1001; i++) {    for(let j = 0; j < 1001; j++) {        dp[i][j] = -1;    }}document.write(countSolutions(n, val)); // This code is contributed by Samim Hossain Mondal.  </script>
10626
Time Complexity: O(n * val)
Auxiliary Space: O(n * val)
nitin mittal
Akanksha_Rai
souravghosh0416
samim2000
Microsoft
Mathematical
Recursion
Technical Scripter
Microsoft
Mathematical
Recursion
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Sieve of Eratosthenes
Prime Numbers
Minimum number of jumps to reach end
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Recursion
Program for Tower of Hanoi
Backtracking | Introduction
Print all subsequences of a string