牛客-小A買彩票(簡單dp)

題目鏈接
題意:
購買一張彩票需要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);
    
}
發佈了17 篇原創文章 · 獲贊 8 · 訪問量 2309
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章