Different ways to represent N as sum of K non-zero integers

Given N and K. The task is to find out how many different ways are there to represent N as the sum of K non-zero integers.

Examples:

Input: N = 5, K = 3
Output: 6
The possible combinations of integers are:
( 1, 1, 3 )
( 1, 3, 1 )
( 3, 1, 1 )
( 1, 2, 2 )
( 2, 2, 1 )
( 2, 1, 2 )



Input: N = 10, K = 4
Output: 84

The approach to the problem is to observe a sequence and use combinations to solve the problem. To obtain a number N, N 1’s are required, summation of N 1’s will give N. The problem allows to use K integers only to make N.

Observation :

Let's take N = 5 and K = 3, then all 
possible combinations of K numbers are: ( 1, 1, 3 )
                                        ( 1, 3, 1 )
                                        ( 3, 1, 1 )
                                        ( 1, 2, 2 )
                                        ( 2, 2, 1 )
                                        ( 2, 1, 2 )

The above can be rewritten as: ( 1, 1, 1 + 1 + 1 )
                               ( 1, 1 + 1 + 1, 1 )
                               ( 1 + 1 + 1, 1, 1 )
                               ( 1, 1 + 1, 1 + 1 )
                               ( 1 + 1, 1 + 1, 1 )
                               ( 1 + 1, 1, 1 + 1 )

From above, a conclusion can be drawn that of N 1’s, k-1 commas have to be placed in between N 1’s and the remaining places are to be filled with ‘+’ signs. All combinations of placing k-1 commas and placing ‘+’ signs in the remaining places will be the answer. So, in general, for N there will be N-1 spaces between all 1, and out of those choose k-1 and place a comma in between those 1. In between the rest 1’s, place ‘+’ signs. So ways of choosing K-1 objects out of N-1 is N-1 \choose K-1. The dynamic programming approach is used to calculate N-1 \choose K-1.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to calculate Different ways to
// represent N as sum of K non-zero integers.
#include <bits/stdc++.h>
using namespace std;
  
// Returns value of Binomial Coefficient C(n, k)
int binomialCoeff(int n, int k)
{
    int C[n + 1][k + 1];
    int i, j;
  
    // Caculate value of Binomial Coefficient in bottom up manner
    for (i = 0; i <= n; i++) {
        for (j = 0; j <= min(i, k); j++) {
            // Base Cases
            if (j == 0 || j == i)
                C[i][j] = 1;
  
            // Calculate value using previously stored values
            else
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
        }
    }
  
    return C[n][k];
}
  
// Driver Code
int main()
{
    int n = 5, k = 3;
    cout << "Total number of different ways are "
         << binomialCoeff(n - 1, k - 1);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to calculate 
// Different ways to represent
// N as sum of K non-zero integers.
import java.io.*;
  
class GFG 
{
  
// Returns value of Binomial
// Coefficient C(n, k)
static int binomialCoeff(int n, 
                         int k)
{
    int C[][] = new int [n + 1][k + 1];
    int i, j;
  
    // Calculate value of Binomial
    // Coefficient in bottom up manner
    for (i = 0; i <= n; i++) 
    {
        for (j = 0
             j <= Math.min(i, k); j++) 
        {
            // Base Cases
            if (j == 0 || j == i)
                C[i][j] = 1;
  
            // Calculate value using
            // previously stored values
            else
                C[i][j] = C[i - 1][j - 1] + 
                          C[i - 1][j];
        }
    }
  
    return C[n][k];
}
  
// Driver Code
public static void main (String[] args)
{
    int n = 5, k = 3;
    System.out.println( "Total number of "
                     "different ways are " +
                        binomialCoeff(n - 1
                                      k - 1));
}
}
  
// This code is contributed
// by anuj_67.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# python 3 program to calculate Different ways to
# represent N as sum of K non-zero integers.
  
# Returns value of Binomial Coefficient C(n, k)
def binomialCoeff(n, k):
    C = [[0 for i in range(k+1)]for i in range(n+1)]
  
    # Caculate value of Binomial Coefficient in bottom up manner
    for i in range(0,n+1,1):
        for j in range(0,min(i, k)+1,1):
            # Base Cases
            if (j == 0 or j == i):
                C[i][j] = 1
  
            # Calculate value using previously stored values
            else:
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j]
  
    return C[n][k]
  
# Driver Code
if __name__ == '__main__':
    n = 5
    k = 3
    print("Total number of different ways are",binomialCoeff(n - 1, k - 1))
      
# This code is contributed by
# Sanjit_Prasad

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to calculate 
// Different ways to represent
// N as sum of K non-zero integers.
using System;
  
class GFG 
{
  
// Returns value of Binomial
// Coefficient C(n, k)
static int binomialCoeff(int n, 
                         int k)
{
    int [,]C = new int [n + 1, 
                        k + 1];
    int i, j;
  
    // Calculate value of 
    // Binomial Coefficient 
    // in bottom up manner
    for (i = 0; i <= n; i++) 
    {
        for (j = 0; 
            j <= Math.Min(i, k); j++) 
        {
            // Base Cases
            if (j == 0 || j == i)
                C[i, j] = 1;
  
            // Calculate value using
            // previously stored values
            else
                C[i, j] = C[i - 1, j - 1] + 
                          C[i - 1, j];
        }
    }
  
    return C[n,k];
}
  
// Driver Code
public static void Main ()
{
    int n = 5, k = 3;
    Console.WriteLine( "Total number of "
                    "different ways are " +
                       binomialCoeff(n - 1, 
                                   k - 1));
}
}
  
// This code is contributed
// by anuj_67.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to calculate 
// Different ways to represent 
// N as sum of K non-zero integers.
  
// Returns value of Binomial
// Coefficient C(n, k)
function binomialCoeff($n, $k)
{
    $C = array(array());
    $i; $j;
  
    // Caculate value of Binomial 
    // Coefficient in bottom up manner
    for ($i = 0; $i <= $n; $i++) 
    {
        for ($j = 0; 
             $j <= min($i, $k); $j++) 
        {
            // Base Cases
            if ($j == 0 or $j == $i)
                $C[$i][$j] = 1;
  
            // Calculate value using 
            // previously stored values
            else
                $C[$i][$j] = $C[$i - 1][$j - 1] + 
                             $C[$i - 1][$j];
        }
    }
  
    return $C[$n][$k];
}
  
// Driver Code
$n = 5; $k = 3;
echo "Total number of "
  "different ways are "
   binomialCoeff($n - 1,
                 $k - 1);
  
// This code is contributed
// by anuj_67.
?>

chevron_right


Output:

Total number of different ways are 6


My Personal Notes arrow_drop_up

pawanasipugmailcom

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.