题意
- 买彩票,3元一张,中1,2,3,4元的概率相等
- 买n张,求不亏的概率
- 输出要求:最简分数,如果概率为0就输出"0/1",概率为1就输出"1/1"
思路
- 类似昨天弹球的问题
- 状态转移可以靠钱勾连
表示买了i张彩票赚j元的可能

- 最后求一个GCD就行,注意只要买了就会亏,所以概率为1只有可能是一张不买
代码
#include<bits/stdc++.h>
using namespace std;
long long dp[40][200];
int main(){
int n;
cin >> n;
dp[1][1]=1;
dp[1][2]=1;
dp[1][3]=1;
dp[1][4]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<=4*n;j++){
dp[i][j]=(j>=1?dp[i-1][j-1]:0)+(j>=2?dp[i-1][j-2]:0)+(j>=3?dp[i-1][j-3]:0)+(j>=4?dp[i-1][j-4]:0);
}
}
long long bas=0,sum=0;
for(int i=0;i<=4*n;i++){
bas+=dp[n][i];
if(i>=3*n)sum+=dp[n][i];
}
long long deal=gcd(bas,sum);
if(n==0) cout << "1/1" << endl;
else if(deal==0) cout << "0/1" << endl;
else cout << sum/deal << '/' << bas/deal <<endl;
return 0;
}