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 . The dynamic programming approach is used to calculate .

Below is the implementation of the above approach:

## C++

`// 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; ` ` ` ` ` `// Calculate 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; ` `} ` |

## Java

`// 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. ` |

## Python3

`# 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` `)] ` ` ` ` ` `# Calculate 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 ` |

## C#

`// 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. ` |

## PHP

`<?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` `; ` ` ` ` ` `// Calculate 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. ` `?> ` |

**Output:**

Total number of different ways are 6

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.