来源:青理交流赛
有一个转盘,如下图所示,问转动n次转盘,总和为m的概率是多少
输入
输入n和m
(1<=n<=100 , 1<= m <= 600)
输出
题目要求的概率值,结果保留4位小数
样例输入
1 13 4
样例输出
0.25000.0469
分析:概率dp入门题记录每个状态有可能有哪几种后继状态可能
#include<iostream>
#include<cstdio>
using namespace std;
double dp[105][405];
int main()
{
int n, m;
dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 0.25;
for(int i = 1; i <= 100; i++)
{
for(int j = i; j <= 400; j++)
{
dp[i][j] += dp[i-1][j-1]*0.25;
if(j >= 2)
dp[i][j] += dp[i-1][j-2]*0.25;
if(j >= 3)
dp[i][j] += dp[i-1][j-3]*0.25;
if(j >= 4)
dp[i][j] += dp[i-1][j-4]*0.25;
}
}
while(cin >> n >> m)
printf("%.4f\n", dp[n][m]);
return 0;
}