Given an integer **N** denoting the number of dices, the task is to find the probability of every possible value that can be obtained by throwing **N **dices together.

**Examples:**

Input:N = 1

Output:

1: 0.17

2: 0.17

3: 0.17

4: 0.17

5: 0.17

6: 0.17

Explanation:On throwing a dice, the probability of all values from [1, 6] to appear at the top is 1/6 = 0.17

Input:N = 2

Output:

2: 0.028

3: 0.056

4: 0.083

5: 0.11

6: 0.14

7: 0.17

8: 0.14

9: 0.11

10: 0.083

11: 0.056

12: 0.028

Explanation:The possible values of the sum of the two numbers that appear at the top on throwing two dices together ranges between [2, 12].

**Approach:** The idea is to use Dynamic programming and DP table to store the probability of each possible value.

- Store the probabilies of all the 6 numbers that can appear on throwing 1 dices.
- Now, for N=2, the probability for all possible sums between [2, 12] is equal to the sum of product of the respective probability of the two numbers that add up to that sum. For example,

Probability of 4 on throwing 2 dices = (Probability of 1 ) * ( Probability of 3) + (Probability of 2) * ( Probability of 2) + (Probability of 3 ) * ( Probability of 1)

- Hence for N dices,

Probability of Sum S = (Probability of 1) * (Probability of S – 1 using N -1 dices) + (Probability of 2) * (Probability of S – 2 using N-1 dices) + ….. + (Probability of 6) * (Probability of S – 6 using N -1 dices)

- Hence, in order to solve the problem, we need to fill dp[][] table from 2 to N using top-down approach using the relation:

dp[i][x] = dp[1][y] + dp[i-1][z] where x = y + z and i denotes the number of dices

- Display all the probabilities stored for N as the answer.

Below is the implementation of the above approach:

## C++

`// C++ Program to calculate ` `// the probabilty of ` `// all the possible values ` `// that can be obtained ` `// throwing N dices ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `void` `dicesSum(` `int` `n) ` `{ ` ` ` `// Store the probablities ` ` ` `vector<map<` `int` `, ` `double` `> > dp(n + 1); ` ` ` `// Precompute the probabilities ` ` ` `// for values possible using 1 dice ` ` ` `dp[1] = { { 1, 1 / 6.0 }, ` ` ` `{ 2, 1 / 6.0 }, ` ` ` `{ 3, 1 / 6.0 }, ` ` ` `{ 4, 1 / 6.0 }, ` ` ` `{ 5, 1 / 6.0 }, ` ` ` `{ 6, 1 / 6.0 } }; ` ` ` ` ` `// Compute the probabilies ` ` ` `// for all values from 2 to N ` ` ` `for` `(` `int` `i = 2; i <= n; i++) { ` ` ` `for` `(` `auto` `a1 : dp[i - 1]) { ` ` ` `for` `(` `auto` `a2 : dp[1]) { ` ` ` `dp[i][a1.first + a2.first] ` ` ` `+= a1.second * a2.second; ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` `// Print the result ` ` ` `for` `(` `auto` `a : dp[n]) { ` ` ` `cout << a.first << ` `" "` ` ` `<< setprecision(2) ` ` ` `<< a.second ` ` ` `<< endl; ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `n = 2; ` ` ` `dicesSum(n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to calculate ` `# the probabilty of all the ` `# possible values that can ` `# be obtained throwing N dices ` `def` `diceSum(n): ` ` ` ` ` `# Inititalize a 2d array upto ` ` ` `# (n*total sum possible) sum ` ` ` `# with value 0 ` ` ` `dp ` `=` `[[ ` `0` `for` `j ` `in` `range` `(n ` `*` `6` `)] ` ` ` `for` `i ` `in` `range` `(n ` `+` `1` `)] ` ` ` ` ` `# Store the probability in a ` ` ` `# single throw for 1,2,3,4,5,6 ` ` ` `for` `i ` `in` `range` `(` `6` `): ` ` ` `dp[` `1` `][i] ` `=` `1` `/` `6` ` ` ` ` `# Compute the probabilies ` ` ` `# for all values from 2 to N ` ` ` `for` `i ` `in` `range` `(` `2` `, n ` `+` `1` `): ` ` ` `for` `j ` `in` `range` `(` `len` `(dp[i ` `-` `1` `])): ` ` ` `for` `k ` `in` `range` `(` `6` `): ` ` ` ` ` `if` `(dp[i ` `-` `1` `][j] !` `=` `0` `and` ` ` `dp[i ` `-` `1` `][k] !` `=` `0` `): ` ` ` `dp[i][j ` `+` `k] ` `+` `=` `(dp[i ` `-` `1` `][j] ` `*` ` ` `dp[` `1` `][k]) ` ` ` ` ` `# Print the result ` ` ` `for` `i ` `in` `range` `(` `len` `(dp[n]) ` `-` `n ` `+` `1` `): ` ` ` `print` `(` `"%d %0.3f"` `%` `(i ` `+` `n, dp[n][i])) ` ` ` `# Driver code ` `n ` `=` `2` ` ` `# Call the function ` `diceSum(n) ` ` ` `# This code is contributed by dipesh99kumar ` |

*chevron_right*

*filter_none*

**Output:**

2 0.028 3 0.056 4 0.083 5 0.11 6 0.14 7 0.17 8 0.14 9 0.11 10 0.083 11 0.056 12 0.028

**Time Complexity:** *O(N ^{2})*

**Auxiliary Space:**

*O(N*

^{2})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:

- Probability of getting a sum on throwing 2 Dices N times
- Probability of obtaining Prime Numbers as product of values obtained by throwing N dices
- Maximum number of dots after throwing a dice N times
- All possible values of floor(N/K) for all values of K
- Conditional Probability and Independence - Probability | Class 12 Maths
- Number of ways to get a given sum with n number of m-faced dices
- Probability of getting at least K heads in N tosses of Coins
- Probability of getting two consecutive heads after choosing a random coin among two different types of coins
- Probability of getting more value in third dice throw
- Probability of getting more heads than tails when N biased coins are tossed
- Probability of getting K heads in N coin tosses
- Probability of getting a perfect square when a random number is chosen in a given range
- Probability of not getting two consecutive heads together in N tosses of coin
- Count of all possible values of X such that A % X = B
- Sum of values of all possible non-empty subsets of the given array
- Product of values of all possible non-empty subsets of given Array
- Find the probability of reaching all points after N moves from point N
- Minimum LCM and GCD possible among all possible sub-arrays
- Sort a String in decreasing order of values associated after removal of values smaller than X
- Sort first k values in ascending order and remaining n-k values in descending order

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.