概率专题 牛客网 小A买***:概率 dp所有的方案数
题目链接:https://ac.nowcoder.com/acm/contest/549/C
题目大意:
dp[i][j]买i张***得到j元奖金的方案数
for(int k=1;k<=4;k++)
{
if(j>=k)
{
dp[i][j]+=dp[i-1][j-k];
}
}
#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL dp[50][150];
int main()
{
LL n;
scanf("%lld",&n);
if(n==0){
cout<<"1/1"<<endl;
return 0;
}
memset(dp, 0, sizeof(dp));
dp[1][1]=dp[1][2]=dp[1][3]=dp[1][4]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=4*n;j++){
for(int k=1;k<=4;k++){
if(j>=k){
dp[i][j]+=dp[i-1][j-k];
}
}
}
}
LL ans1=0, ans2=0;
for(int i=3*n;i<=4*n;i++){
ans1+=dp[n][i];
}
for(int i=1;i<=4*n;i++){
ans2+=dp[n][i];
}
LL gcd=__gcd(ans1, ans2);
cout<<ans1/gcd<<'/'<<ans2/gcd<<endl;
return 0;
}