boj 288

Description

As is told by the olds, there is a wonderful land of girls and magic, which has a fantasy name —— Gensokyo.

Today's Gensokyo is still peaceful. And a silly ice fairy Cirno wants to play games with her girfriend Daiyousei. She uses her ice magic to make some ice cubes with numbers on it so that it can be used as dices. 

Before their game begin, Daiyousai asks her a strange question : "If I dice ⑨ times, what 's the probability to have the sum of the points to be k?" Because Cirno's IQ is only ⑨ (She often thinks that 1 + 1 = ⑨), so solving the problem is beyond her ability. But before she works it out, the game won't begin, so she asks you to write a program to help her.

In order to prevent Daiyousei asking other strange questions, your program should solve the extended version —— suggest there is a dice which's shape is a regular n-side polygon, and Daiyousei would dice m times, what's the probability for the sum of the points to be k?

 

 

Input

 

There are several test cases.

In one test case, there is only one line, which contains 3 integers n, m and k.(0 < n <= ⑨ + ⑨, 0 < m <= ⑨, 0 < k <= n * m). 

 

 

Output

 

One line for each case. The probability p.

The output should be given with two decimal places.

 

 

Sample input

 

9 2 9

9 3 2

 

 

Sample output

 

0.10

0.00

 

 

Hint

You may think a regular ⑨-side polygon cannot exist, but in Gensokyo, common sense doesn't work.

 

 

动态规划,dp[n][m][k]表示n面骰子掷m次能出现和为k的次数。

dp[p][i][j]=∑dp[p][i-1][j-k];(k∈[1,j]&&dp[p][1][k]!=0&&dp[p][i-1][j-k]!=0);

代码:

#include<iostream>
using namespace std;

double dp[20][10][300];

long long pow(int n,int k)
{
	long long mul=1;
	for(int i=0;i<k;i++)
		mul=mul*n;
	return mul;
}
int main()
{
	for(int i=1;i<=9;i++)
	{
		for(int p=1;p<=18;p++)
		{
			for(int j=i;j<=i*p;j++)
			{
				if(i==1)
					dp[p][i][j]=1;
				for(int k=1;k<=j;k++)
				if(dp[p][1][k]&&dp[p][i-1][j-k])
					dp[p][i][j]+=dp[p][i-1][j-k];
			}
		}
	}
	int n,m,k;
	while(~scanf("%d%d%d",&n,&m,&k))
		printf("%.2lf\n",dp[n][m][k]/pow(n,m));
}

 

你可能感兴趣的:(BO)