試題 算法提高 概率計(jì)算

試題 算法提高 概率計(jì)算(動(dòng)態(tài)規(guī)劃)


問(wèn)題描述
  生成n個(gè)∈[a,b]的隨機(jī)整數(shù),輸出它們的和為x的概率。
輸入格式
  一行輸入四個(gè)整數(shù)依次為n,a,b,x,用空格分隔。
輸出格式
  輸出一行包含一個(gè)小數(shù)位和為x的概率,小數(shù)點(diǎn)后保留四位小數(shù)
樣例輸入
2 1 3 4
樣例輸出
0.3333
思路:
此題是一種概率題,題目意思就是隨機(jī)出n個(gè)整數(shù)范圍是a-b然后讓我們求n個(gè)整數(shù)和為x的概率為多少?
我們這時(shí)知道a到b的數(shù)出現(xiàn)的概率,概率為:1/(a-b+1)這就是他們每個(gè)數(shù)出現(xiàn)的概率。
那要求n個(gè)隨機(jī)出來(lái)的數(shù)的x的概率,我們假設(shè)隨機(jī)2數(shù)時(shí)的和出現(xiàn)的概率,我們第一個(gè)數(shù)為n時(shí) 那么第二個(gè)數(shù)的概率就是x-n這個(gè)數(shù)可能出現(xiàn)的概率 在1/(a-b+1) 應(yīng)該上面是出現(xiàn)x-n的概率x想要2個(gè)出現(xiàn)的概率就是他們概率的乘積。
從上面得知我們可以用動(dòng)態(tài)規(guī)劃的方式了完成,我們建立dp[i][j]表示當(dāng)在a-b之間抽i個(gè)數(shù) 他們的和為j的概率為多少。
我們把dp[1][a-b] 的概率放入數(shù)組中 1/(b-a+1)概率。
我們?cè)诮?個(gè)for循環(huán),第一層表示當(dāng)前抽幾個(gè)數(shù),第二層表示當(dāng)前的第一個(gè)數(shù)為多少 ,第三層表示抽出來(lái)的數(shù)和。
我們知道 二個(gè)數(shù)的概率+=第一數(shù)的概率
第二個(gè)數(shù)的概率 把出現(xiàn)這個(gè)概率相加就是總概率。
我們就真的轉(zhuǎn)移方程就是:dp[i][m]+=1/(b-a+1)*dp[i-1][m-j]

程序:

n,a,b,x=map(int,input().split())
dp=[[0 for i1 in range(x+2)] for i in range(n+5)]  #初始化
for i in range(a,b+1):  #把a(bǔ)-b的概率放在dp中
    dp[1][i]=1/(b-a+1)
for i in range(2,n+1):  #抽幾個(gè)數(shù)
    for j in range(a,b+1):  #第一個(gè)數(shù)為
        for m in range(j,x+1):  #抽出來(lái)的數(shù)可以組出的數(shù)
            dp[i][m]+=dp[i-1][m-j]/(b-a+1)

print("{:.4f}".format(dp[n][x]))

禁止轉(zhuǎn)載。僅用于自己學(xué)習(xí)。對(duì)程序錯(cuò)誤不負(fù)責(zé)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容