洛谷2719搞笑世界盃
題目描述
隨著世界盃小組賽的結束,法國,阿根廷等世界強隊都紛紛被淘汰,讓人心痛不已. 於是有人組織了一場搞笑世界盃,將這些被淘汰的強隊重新組織起來和世界盃一同比賽.你和你的朋友欣然去購買球票.不過搞笑世界盃的球票出售方式也很特別,它們只准備了兩種球票.A 類票------免費球票 B 類票-------雙倍價錢球票.購買時由工作人員通過擲硬幣決定,投到正面,的買A類票, 反面的買B類票.並且由於是市場經濟,主辦方不可能倒貼錢,所以他們總是準備了同樣多的A類票和B類票.你和你的朋友十分幸運的排到了某場精彩比賽的最後兩個位置.
這時工作人員開始通過硬幣售票.不過更為幸運的是當工作人員到你們面前時他發現已無需再擲硬幣了,因為剩下的這兩張票全是免費票。
你和你的朋友在欣喜之餘,想計算一下排在隊尾的兩個人同時拿到一種票的概率是多少(包括同時拿A 類票或B類票) 假設工作人員準備了2n 張球票,其中n 張A類票,n 張B類票,並且排在隊伍中的人每人必須且只能買一張球票(不管擲到的是該買A 還是該買B).
輸入輸出格式
輸入格式:
輸入檔案僅一行,包含球票數2n . 其中,0<n<=1250 ,n 為整數。
輸出格式:
輸出檔案只包含一個數,為拿到同一種票的概率,精確到小數點後4 位。
輸入輸出樣例
輸入樣例#1:
256
輸出樣例#1:
0.9500
思路:
概率dp的入門題,我們設dp【i】【j】代表A類票有i張,B類票有j張最後兩張相同的概率。我們初始化dp【i】【0】= 1(2 <= i <= n),dp【0】【i】 = 1(2 <= i <= n),其餘為0.然後利用dp【i】【j】= dp【i - 1】【j】✖️0.5 + dp【i】【j-1】✖️0.5,最後dp【n】【n】即為答案
程式碼:
#include <stdio.h> double dp[1300][1300] = {0}; int main () { int n; scanf("%d", &n); for (int i = 2; i <= n / 2; i++) { dp[i][0] = dp[0][i] = 1; } for (int i = 1; i <= n / 2; i++) { for (int j = 1; j <= n / 2; j++) { dp[i][j] = dp[i - 1][j] * 0.5 + dp[i][j - 1] * 0.5; } } printf("%.4f\n", dp[n / 2][n / 2]); return 0; }
如果有寫的不對或者不全面的地方 可通過主頁的聯絡方式進行指正,謝謝