题目链接
题意:
购买一张彩票需要3元,而彩票中奖的金额分别为1,2,3,4元,并且比较独特的是这个彩票中奖的各种金额都是等可能的。现在小A连续购买了n张彩票,他希望你能够告诉他至少能够不亏本的概率是多少。
错误:
1 当n==0时 应该输出1/1 而不是0/1
2 用longlong
思路:
d[i][j]代表购买第i张彩票时获得j收益的方案数
易知
d[1][1]=d[1][2]=d[1][3]=d[1][4]=1
当购买第i张彩票时 收益范围在 1—i*4
d[i][j] = d[i-1][j-k] (k=1,2,3,4)
AC代码:
ll d[30+10][120+10];
int main()
{
int n;cin>>n;
if(n==0)
{
printf("1/1");
return 0;
}
for(int i=1;i<=4;i++) d[1][i] = 1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i*4;j++) //第i次最多可以赚4*i
{
for(int k=1;k<=4;k++)
{
if(j-k) d[i][j] += d[i-1][j-k];
}
}
}
ll cn1=0,cn2=0;
for(int i=1;i<=n*4;i++)
{
cn1+=d[n][i]; //全部方案数
if(i>=n*3) cn2+=d[n][i];
}
ll k = __gcd(cn1,cn2);
printf("%lld/%lld",cn2/k,cn1/k);
}