1. 程式人生 > >洛谷——P2719 搞笑世界杯

洛谷——P2719 搞笑世界杯

mes n) efi www 比賽 https define 兩個人 esp

P2719 搞笑世界杯

題目描述

隨著世界杯小組賽的結束,法國,阿根廷等世界強隊都紛紛被淘汰,讓人心痛不已. 於是有人組織了一場搞笑世界杯,將這些被淘汰的強隊重新組織起來和世界杯一同比賽.你和你的朋友欣然去購買球票.不過搞笑世界杯的球票出售方式也很特別,它們只準備了兩種球票.A 類票------免費球票 B 類票-------雙倍價錢球票.購買時由工作人員通過擲硬幣決定,投到正面,的買A類票, 反面的買B類票.並且由於是市場經濟,主辦方不可能倒貼錢,所以他們總是準備了同樣多的A類票和B類票.你和你的朋友十分幸運的排到了某場精彩比賽的最後兩個位置.

這時工作人員開始通過硬幣售票.不過更為幸運的是當工作人員到你們面前時他發現已無需再擲硬幣了,因為剩下的這兩張票全是免費票。

你和你的朋友在欣喜之余,想計算一下排在隊尾的兩個人同時拿到一種票的概率是多少(包括同時拿A 類票或B類票) 假設工作人員準備了2n 張球票,其中n 張A類票,n 張B類票,並且排在隊伍中的人每人必須且只能買一張球票(不管擲到的是該買A 還是該買B).

設$dp[i][j]$表示已經銷售$i$張A,$j$張B兩人買到相同票的概率

狀態轉移方程:$dp [ i ] [ j ] = ( dp [ i - 1 ] [ j ] + dp [ i ] [ j - 1 ] ) * 0.5$

每次要麽賣A,要麽賣B,而其概率是由拋硬幣決定的,故為1/2

#include<bits/stdc++.h>

#define
N 1252 using namespace std; double dp[N][N]; int n; int main() { scanf("%d",&n); n/=2; for(int i=2;i<=n;i++) dp[i][0]=dp[0][i]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=dp[i-1][j]*0.5+dp[i][j-1]*0.5; printf("%.4lf
",dp[n][n]); return 0; }

洛谷——P2719 搞笑世界杯