题目描述
有一个转盘,如下图所示,问转动n次转盘,总和为m的概率是多少
输入
输入n和m
(1<=n<=100 , 1<= m <= 600)
输出
题目要求的概率值,结果保留4位小数
样例输入
1 13 4
样例输出
0.25000.0469
思路:用一个二维数组存转的次数以及一共多大。。每个数只有4个来源。。因为题解说是概率DP入门题。。所以就是概率DP了。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double a[105][605];
int main(void)
{
int n, m;
a[1][1] = 0.250, a[1][2] = 0.250, a[1][3] = 0.250, a[1][4] = 0.250;
for(int i = 2; i <= 100; i++)
for(int j = 1; j <= 600; j++)
{
a[i][j] += a[i-1][j-1]*0.250;
if(j >= 2) a[i][j] += a[i-1][j-2]*0.250;
if(j >= 3) a[i][j] += a[i-1][j-3]*0.250;
if(j >= 4) a[i][j] += a[i-1][j-4]*0.250;
}
while(cin >> n >> m)
printf("%.4f\n", a[n][m]);
return 0;
}