题目描述
n个人排成一排,你排在第m个。每轮队首的人投一次骰子:
若掷到1,则队首的人获胜;
若掷到2,4,6,则队首的人排到队尾;
若掷到3,5,则队首的人出队。
获胜者仅有一人,若队列中仅剩一人,则该人获胜。求你获胜的概率。
输入格式
一行两个整数n,m
输出格式
一个实数表示获胜概率(精确到小数点后9位)
输入输出样例
输入 #1
2 1
输出 #1
0.375000000
说明/提示
【数据范围】
对于30%的数据:n<=10
对于100%的数据:n<=1000,m<=n
代码
扫描二维码关注公众号,回复:
7230606 查看本文章
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=10010; int n,m; double f[N][N]; int main () { scanf("%d%d",&n,&m); f[1][1]=1; for(int i=2; i<=n; i++) { double x=(double)1/2,c=(double)1/6; for(int j=2; j<=i; j++) { x=x/2; c=c/2+f[i-1][j-1]/3; } f[i][i]=c/(1-x); f[i][1]=f[i][i]/2+(double)1/6; for(int j=2; j<i; j++) f[i][j]=f[i][j-1]/2+f[i-1][j-1]/3; } printf("%.9lf\n",f[n][m]); return 0; }