Count number of ways to reach a given score in a game - GeeksforGeeks

09 Apr, 2021
Consider a game where a player can score 3 or 5 or 10 points in a move. Given a total score n, find number of ways to reach the given score.Examples:  
Input: n = 20
Output: 4
There are following 4 ways to reach 20
(10, 10)
(5, 5, 10)
(5, 5, 5, 5)
(3, 3, 3, 3, 3, 5)

Input: n = 13
Output: 2
There are following 2 ways to reach 13
(3, 5, 5)
(3, 10)
 
This problem is a variation of coin change problem and can be solved in O(n) time and O(n) auxiliary space.The idea is to create a table of size n+1 to store counts of all scores from 0 to n. For every possible move (3, 5 and 10), increment values in table.  
C++
C
Java
Python3
C#
PHP
Javascript
// A C++ program to count number of// possible ways to a given score// can be reached in a game where a// move can earn 3 or 5 or 10#include <iostream>using namespace std; // Returns number of ways// to reach score nint count(int n){    // table[i] will store count    // of solutions for value i.    int table[n + 1], i;     // Initialize all table    // values as 0    for(int j = 0; j < n + 1; j++)            table[j] = 0;     // Base case (If given value is 0)    table[0] = 1;     // One by one consider given 3 moves    // and update the table[] values after    // the index greater than or equal to    // the value of the picked move    for (i = 3; i <= n; i++)    table[i] += table[i - 3];         for (i = 5; i <= n; i++)    table[i] += table[i - 5];         for (i = 10; i <= n; i++)    table[i] += table[i - 10];     return table[n];} // Driver Codeint main(void){    int n = 20;    cout << "Count for " << n         << " is " << count(n) << endl;     n = 13;    cout <<"Count for "<< n<< " is "         << count(n) << endl;    return 0;} // This code is contributed// by Shivi_Aggarwal
// A C program to count number of possible ways to a given score// can be reached in a game where a move can earn 3 or 5 or 10#include <stdio.h> // Returns number of ways to reach score nint count(int n){    // table[i] will store count of solutions for    // value i.    int table[n+1], i;     // Initialize all table values as 0    memset(table, 0, sizeof(table));     // Base case (If given value is 0)    table[0] = 1;     // One by one consider given 3 moves and update the table[]    // values after the index greater than or equal to the    // value of the picked move    for (i=3; i<=n; i++)       table[i] += table[i-3];    for (i=5; i<=n; i++)       table[i] += table[i-5];    for (i=10; i<=n; i++)       table[i] += table[i-10];     return table[n];}  // Driver programint main(void){    int n = 20;    printf("Count for %d is %d\n", n, count(n));     n = 13;    printf("Count for %d is %d", n, count(n));    return 0;}
// Java program to count number of// possible ways to a given score// can be reached in a game where// a move can earn 3 or 5 or 10import java.util.Arrays; class GFG{    // Returns number of ways to reach score n    static int count(int n)    {        // table[i] will store count of solutions for        // value i.        int table[] = new int[n + 1], i;             // Initialize all table values as 0        Arrays.fill(table, 0);             // Base case (If given value is 0)        table[0] = 1;             // One by one consider given 3        // moves and update the table[]        // values after the index greater        // than or equal to the value of        // the picked move        for (i = 3; i <= n; i++)            table[i] += table[i - 3];        for (i = 5; i <= n; i++)            table[i] += table[i - 5];        for (i = 10; i <= n; i++)            table[i] += table[i - 10];             return table[n];    }         // Driver code    public static void main (String[] args)    {        int n = 20;        System.out.println("Count for "+n+" is "+count(n));             n = 13;        System.out.println("Count for "+n+" is "+count(n));    }} // This code is contributed by Anant Agarwal.
# Python program to count number of possible ways to a given# score can be reached in a game where a move can earn 3 or# 5 or 10. # Returns number of ways to reach score n.def count(n):     # table[i] will store count of solutions for value i.    # Initialize all table values as 0.    table = [0 for i in range(n+1)]     # Base case (If given value is 0)    table[0] = 1     # One by one consider given 3 moves and update the    # table[] values after the index greater than or equal    # to the value of the picked move.    for i in range(3, n+1):        table[i] += table[i-3]    for i in range(5, n+1):        table[i] += table[i-5]    for i in range(10, n+1):        table[i] += table[i-10]     return table[n] # Driver Programn = 20print('Count for', n, 'is', count(n)) n = 13print('Count for', n, 'is', count(n)) # This code is contributed by Soumen Ghosh
// C# program to count number of// possible ways to a given score// can be reached in a game where// a move can earn 3 or 5 or 10using System; class GFG {         // Returns number of ways to reach    // score n    static int count(int n)    {                 // table[i] will store count        // of solutions for value i.        int []table = new int[n + 1];             // Initialize all table values        // as 0        for(int j = 0; j < n+1; j++)            table[j] = 0;                 // Base case (If given value is 0)        table[0] = 1;             // One by one consider given 3        // moves and update the table[]        // values after the index greater        // than or equal to the value of        // the picked move        for (int i = 3; i <= n; i++)            table[i] += table[i - 3];        for (int i = 5; i <= n; i++)            table[i] += table[i - 5];        for (int i = 10; i <= n; i++)            table[i] += table[i - 10];             return table[n];    }         // Driver code    public static void Main ()    {        int n = 20;        Console.WriteLine("Count for "             + n + " is " + count(n));             n = 13;        Console.Write("Count for "            + n + " is " + count(n));    }} // This code is contributed by nitin mittal.
<?php// PHP program to count number of// possible ways to a given score// can be reached in a game where// a move can earn 3 or 5 or 10// Returns number of ways to reach// score nfunction counts($n){    // table[i] will store count    // of solutions for value i.     // Initialize all table    // values as 0    for($j = 0; $j < $n + 1; $j++)            $table[$j] = 0;     // Base case (If given value is 0)    $table[0] = 1;     // One by one consider given 3 moves    // and update the table[] values after    // the index greater than or equal to    // the value of the picked move    for ($i = 3; $i <= $n; $i++)    $table[$i] += $table[$i - 3];         for ($i = 5; $i <= $n; $i++)    $table[$i] += $table[$i - 5];         for ($i = 10; $i <= $n; $i++)    $table[$i] += $table[$i - 10];     return $table[$n];} // Driver Code$n = 20;echo "Count for ";echo($n);echo (" is ");echo counts($n); $n = 13;echo ("\n") ;echo "Count for ";echo($n);echo (" is " );echo counts($n); // This code is contributed// by Shivi_Aggarwal?>
<script> // A JavaScript program to count number of// possible ways to a given score// can be reached in a game where a// move can earn 3 or 5 or 10 // Returns number of ways// to reach score nfunction count(n){    // table[i] will store count    // of solutions for value i.    let table = new Array(n + 1), i;     // Initialize all table    // values as 0    for(let j = 0; j < n + 1; j++)            table[j] = 0;     // Base case (If given value is 0)    table[0] = 1;     // One by one consider given 3 moves    // and update the table[] values after    // the index greater than or equal to    // the value of the picked move    for (i = 3; i <= n; i++)    table[i] += table[i - 3];         for (i = 5; i <= n; i++)    table[i] += table[i - 5];         for (i = 10; i <= n; i++)    table[i] += table[i - 10];     return table[n];} // Driver Code     let n = 20;    document.write("Count for " + n        + " is " + count(n) + "<br>");     n = 13;    document.write("Count for "+ n + " is "        + count(n) + "<br>");   // This code is contributed by Surbhi Tyagi. </script>
Output: 
Count for 20 is 4
Count for 13 is 2 
 
YouTubeGeeksforGeeks506K subscribersCount number of ways to reach a given score in a game | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 4:33•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=LoKW5RkQ_1s" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Exercise: How to count score when (10, 5, 5), (5, 5, 10) and (5, 10, 5) are considered as different sequences of moves. Similarly, (5, 3, 3), (3, 5, 3) and (3, 3, 5) are considered different.This article is contributed by Rajeev Arora. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
nitin mittal
Shivi_Aggarwal
surbhityagi15
Amazon
Dynamic Programming
Amazon
Dynamic Programming
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Bellman–Ford Algorithm | DP-23
Floyd Warshall Algorithm | DP-16
Subset Sum Problem | DP-25
Matrix Chain Multiplication | DP-8
Travelling Salesman Problem | Set 1 (Naive and Dynamic Programming)
Longest Palindromic Substring | Set 1
Edit Distance | DP-5
Sieve of Eratosthenes
Overlapping Subproblems Property in Dynamic Programming | DP-1
Minimum number of jumps to reach end