題目鏈接
題意:
購買一張彩票需要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);
}