描述
骰子是一个六面分别刻有一到六点的立方体,每次投掷骰子,理论上得到1到6的概率都是1/6
有骰子一颗,连续投掷n次,问点数总和大于等于X的概率是多少
输入
输入一行2个证书,分别表示n,X,其中1<=N<=24,0<=X<150
输出
1行,一个分数,要求用最简的形式精确的表达投掷n次骰子,总数大于等于x的概率。如果是0/1,则输出0,如果1/1输出1
样例输入
3 9
样例输出
20/27
概率DP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll x,n;
ll f[30][200];
ll gcd(ll x,ll y)
{
if(!y) return x;
return gcd(y,x%y);
}
int main()
{
cin>>n>>x;
f[0][0]=1;
for(int i=1;i<=n;++i)
for(int j=i;j<=6*i;++j)
for(int k=1;k<=6;++k)
if(k<=j) f[i][j]+=f[i-1][j-k];
ll ans1=0,ans2=0;
for(int i=n;i<=6*n;++i)
{
ans1+=f[n][i];
if(i>=x) ans2+=f[n][i];
}
ll g=gcd(ans1,ans2);
ans1/=g,ans2/=g;
if(ans1==1) cout<<ans2;
else cout<<ans2<<"/"<<ans1;
return 0;
}