Count of different ways to express N as the sum of 1, 3 and 4

• Difficulty Level : Easy

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

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

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:

DPn = DPn-1 + DPn-3 + DPn-4
Base case :
DP = DP = DP = 1 and DP = 2

C++

// C++ 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 = DP = DP = 1;
DP = 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;
}

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 = DP = DP = 1;
DP = 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.

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 = DP = DP = 1
DP = 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.

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 = DP = DP = 1;
DP = 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.

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 = \$DP = \$DP = 1;
\$DP = 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
?>

Javascript

<script>

// Javascript 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)
{
var DP = [];
DP.length = 10;
DP.fill(0);

// Base cases
DP = DP = DP = 1;
DP = 2;

// Iterate for all values from 4 to n
for(var i = 4; i <= n; i++)
DP[i] = DP[i - 1] + DP[i - 3] +
DP[i - 4];

return DP[n];
}

// Driver code
var n = 10;

document.write(countWays(n));

// This code is contributed by bunnyram19

</script>

Output:

64

Time Complexity : O(n)
Auxiliary Space : O(n)

My Personal Notes arrow_drop_up