human
Dice Throw | DP | * Count ways * * @ param f * @ param d * @ param s * @ return.
Create a table to store results of subproblems . One extra row and column are used for simpilicity ( Number of dice is directly used as row index and sum is directly used as column index ) . The entries in 0 th row and 0 th column are never used ..
Table entries for no dices If you do not have any data , then the value must be 0 , so the result is 1.
Iterate over dices.
Iterate over sum.
The result is obtained in two ways , pin the current dice and spending 1 of the value , so we have mem [ i - 1 ] [ j - 1 ] remaining combinations , to find the remaining combinations we would have to pin the values ? ? above 1 then we use mem [ i ] [ j - 1 ] to sum all combinations that pin the remaining j - 1 's. But there is a way, when "j-f-1> = 0" we would be adding  extra combinations, so we remove the combinations that only pin the extrapolated dice face and  subtract the extrapolated combinations..
Driver code"
Solution in Python:

=====
Can you provide a code to dice Throw and the other steps required?
assistant
#Here is code to dice Throw and the other steps required.
 def findWays ( f , d , s ) :
	mem = [ [ 0 for i in range ( s + 1 ) ] for j in range ( d + 1 ) ]
	mem [ 0 ] [ 0 ] = 1
	for i in range ( 1 , d + 1 ) :
		for j in range ( 1 , s + 1 ) :
			mem [ i ] [ j ] = mem [ i ] [ j - 1 ] + mem [ i - 1 ] [ j - 1 ]
			if j - f - 1 >= 0 :
				mem [ i ] [ j ] -= mem [ i - 1 ] [ j - f - 1 ]
	return mem [ d ] [ s ]
print ( findWays ( 4 , 2 , 1 ) )
print ( findWays ( 2 , 2 , 3 ) )
print ( findWays ( 6 , 3 , 8 ) )
print ( findWays ( 4 , 2 , 5 ) )
print ( findWays ( 4 , 3 , 5 ) )