Given N, count the number of ways to express N as sum of 1, 3 and 4.

**Examples:**

Input : N = 4 Output : 4 Explanation: 1+1+1+1 1+3 3+1 4 Input : N = 5 Output : 6 Explanation: 1 + 1 + 1 + 1 + 1 1 + 4 4 + 1 1 + 1 + 3 1 + 3 + 1 3 + 1 + 1

**Approach : ** Divide the problem into sub-problems for solving it. Let DP[n] be the be the number of ways to write N as the sum of 1, 3, and 4. Consider one possible solution with n = x1 + x2 + x3 + … xn. If the last number is 1, then sum of the remaining numbers is n-1. So the number that ends with 1 is equal to DP[n-1]. Taking other cases into account where the last number is 3 and 4. The final recurrence would be:

DP_{n}= DP_{n-1}+ DP_{n-3}+ DP_{n-4}

Base case :DP[0] = DP[1] = DP[2] = 1 and DP[3] = 2

## C++

`// CPP program to illustrate the number of ` `// ways to represent N as sum of 1, 3 and 4. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// function to count the number of ` `// ways to represent n as sum of 1, 3 and 4 ` `int` `countWays(` `int` `n) ` `{ ` ` ` `int` `DP[n + 1]; ` ` ` ` ` `// base cases ` ` ` `DP[0] = DP[1] = DP[2] = 1; ` ` ` `DP[3] = 2; ` ` ` ` ` `// iterate for all values from 4 to n ` ` ` `for` `(` `int` `i = 4; i <= n; i++) ` ` ` `DP[i] = DP[i - 1] + DP[i - 3] + DP[i - 4]; ` ` ` ` ` `return` `DP[n]; ` `} ` ` ` `// driver code ` `int` `main() ` `{ ` ` ` `int` `n = 10; ` ` ` `cout << countWays(n); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to illustrate ` `// the number of ways to represent ` `// N as sum of 1, 3 and 4. ` ` ` `class` `GFG { ` ` ` ` ` `// Function to count the ` ` ` `// number of ways to represent ` ` ` `// n as sum of 1, 3 and 4 ` ` ` `static` `int` `countWays(` `int` `n) ` ` ` `{ ` ` ` `int` `DP[] = ` `new` `int` `[n + ` `1` `]; ` ` ` ` ` `// base cases ` ` ` `DP[` `0` `] = DP[` `1` `] = DP[` `2` `] = ` `1` `; ` ` ` `DP[` `3` `] = ` `2` `; ` ` ` ` ` `// iterate for all values from 4 to n ` ` ` `for` `(` `int` `i = ` `4` `; i <= n; i++) ` ` ` `DP[i] = DP[i - ` `1` `] + DP[i - ` `3` `] ` ` ` `+ DP[i - ` `4` `]; ` ` ` ` ` `return` `DP[n]; ` ` ` `} ` ` ` ` ` `// driver code ` ` ` `public` `static` `void` `main(String[] args) ` ` ` `{ ` ` ` `int` `n = ` `10` `; ` ` ` `System.out.println(countWays(n)); ` ` ` `} ` `} ` ` ` `// This code is contributed ` `// by prerna saini. ` |

*chevron_right*

*filter_none*

## Python3

`# Python program to illustrate the number of ` `# ways to represent N as sum of 1, 3 and 4. ` ` ` `# Function to count the number of ` `# ways to represent n as sum of 1, 3 and 4 ` `def` `countWays(n): ` ` ` ` ` `DP ` `=` `[` `0` `for` `i ` `in` `range` `(` `0` `, n ` `+` `1` `)] ` ` ` ` ` `# base cases ` ` ` `DP[` `0` `] ` `=` `DP[` `1` `] ` `=` `DP[` `2` `] ` `=` `1` ` ` `DP[` `3` `] ` `=` `2` ` ` ` ` `# Iterate for all values from 4 to n ` ` ` `for` `i ` `in` `range` `(` `4` `, n ` `+` `1` `): ` ` ` `DP[i] ` `=` `DP[i ` `-` `1` `] ` `+` `DP[i ` `-` `3` `] ` `+` `DP[i ` `-` `4` `] ` ` ` ` ` `return` `DP[n] ` ` ` ` ` `# Driver code ` `n ` `=` `10` `print` `(countWays(n)) ` ` ` `# This code is contributed by Gitanjali. ` |

*chevron_right*

*filter_none*

## C#

`// C# program to illustrate ` `// the number of ways to represent ` `// N as sum of 1, 3 and 4. ` `using` `System; ` ` ` `class` `GFG { ` ` ` ` ` `// Function to count the ` ` ` `// number of ways to represent ` ` ` `// n as sum of 1, 3 and 4 ` ` ` `static` `int` `countWays(` `int` `n) ` ` ` `{ ` ` ` `int` `[]DP = ` `new` `int` `[n + 1]; ` ` ` ` ` `// base cases ` ` ` `DP[0] = DP[1] = DP[2] = 1; ` ` ` `DP[3] = 2; ` ` ` ` ` `// iterate for all values from 4 to n ` ` ` `for` `(` `int` `i = 4; i <= n; i++) ` ` ` `DP[i] = DP[i - 1] + DP[i - 3] ` ` ` `+ DP[i - 4]; ` ` ` ` ` `return` `DP[n]; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `int` `n = 10; ` ` ` `Console.WriteLine(countWays(n)); ` ` ` `} ` `} ` ` ` `// This code is contributed ` `// by vt_m. ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to illustrate ` `// the number of ways to ` `// represent N as sum of ` `// 1, 3 and 4. ` ` ` `// function to count the ` `// number of ways to ` `// represent n as sum of ` `// 1, 3 and 4 ` `function` `countWays(` `$n` `) ` `{ ` ` ` `$DP` `= ` `array` `(); ` ` ` ` ` `// base cases ` ` ` `$DP` `[0] = ` `$DP` `[1] = ` `$DP` `[2] = 1; ` ` ` `$DP` `[3] = 2; ` ` ` ` ` `// iterate for all ` ` ` `// values from 4 to n ` ` ` `for` `(` `$i` `= 4; ` `$i` `<= ` `$n` `; ` `$i` `++) ` ` ` `$DP` `[` `$i` `] = ` `$DP` `[` `$i` `- 1] + ` ` ` `$DP` `[` `$i` `- 3] + ` ` ` `$DP` `[` `$i` `- 4]; ` ` ` ` ` `return` `$DP` `[` `$n` `]; ` `} ` ` ` `// Driver Code ` `$n` `= 10; ` `echo` `countWays(` `$n` `); ` ` ` `// This code is contributed ` `// by Sam007 ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

64

**Time Complexity :** O(n)

**Auxiliary Space :** O(n)

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.

## Recommended Posts:

- Count ways to express 'n' as sum of odd integers
- Count ways to express even number ānā as sum of even integers
- Different ways to sum n using numbers greater than or equal to m
- Different ways to represent N as sum of K non-zero integers
- Ways to arrange Balls such that adjacent balls are of different types
- Ways to select one or more pairs from two different sets
- Ways of dividing a group into two halves such that two elements are in different groups
- Calculate Stirling numbers which represents the number of ways to arrange r objects around n different circles
- Ways to fill N positions using M colors such that there are exactly K pairs of adjacent different colors
- Number of ways to arrange K different objects taking N objects at a time
- 3 Different ways to print Fibonacci series in Java
- Minimum numbers needed to express every integer below N as a sum
- Minimum number of palindromes required to express N as a sum | Set 1
- Minimum number of palindromes required to express N as a sum | Set 2
- Count numbers in a range with digit sum divisible by K having first and last digit different
- Count ways to generate N-length array with 0s, 1s, and 2s such that sum of all adjacent pairwise products is K
- Count of binary strings of length N having equal count of 0's and 1's and count of 1's ≥ count of 0's in each prefix substring
- Count number of ways to get Odd Sum
- Count of ways in which N can be represented as sum of Fibonacci numbers without repetition
- Count ways to obtain given sum by repeated throws of a dice

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.