uva557或P2719 搞笑世界盃的三種解法

2021-10-25 17:03:45 字數 1618 閱讀 6054

設一共有n個漢堡(n為偶數且n<=100000),其中有n/2個火腿漢堡,n/2個芝士漢堡。

n個小朋友坐成一排,依次等概率抽選漢堡。有意思的是,抽完倒數第三個小朋友時,廚師發現抽不下去了,因為正好剩下了兩個相同的漢堡。

廚師覺得很有趣,想問你出現這種情況的概率。

輸入格式 第一行乙個整數tt,表示測試組數。

對於每組測試,輸入乙個n,意義如上。

輸出格式 輸出t行,每行為對應測試的答案。

輸入

3610

256

輸出

0.6250

0.7266

0.9500

n為偶數,為了方便計算,n/=2;

考慮對立事件,也就是最後兩個孩子吃到不同漢堡的概率,說明前面的 2n−2 個孩子吃掉了 n−1 個牛肉漢堡和 n−1 個雞肉漢堡,並且他們每次吃以前都會拋硬幣決定,那麼這個概率就是

然後直接暴算

#include #include using namespace std;

int main()

printf("%.4lf", 1 - ans);

return 0;

}

推導一下遞迴公式:

首先開二維陣列 dp [ i ] [ j ] . 代表已售 i 張 a , j 張 b 時後兩人買到的票相同的概率。

很顯然,dp [ 1 ] [ 0 ] 與 dp [ 0 ] [ 1 ] 的初始值應該為 1 ,因為當只有一張票被售出時,我們可以預設後兩個人買的票型別相同,所以買到票相同的概率位 100% .

然後開始推狀態轉移方程:dp [ i ] [ j ] = ( dp [ i - 1 ] [ j ] + dp [ i ] [ j - 1 ] ) * 0.5 。

每乙個狀態 dp [ i ] [ j ] 都是由 dp [ i - 1 ] [ j ] 和 dp [ i ] [ j - 1 ] 得到的,因為每次賣票要麼會賣 a ,要麼會賣 b ,根據加法計數原理加起來就好了,但是由於兩種情況是由拋硬幣來決定的,所以發生的機率都會 50% 。

於是乎,dp [ i ] [ j ] = ( dp [ i - 1 ] [ j ] + dp [ i ] [ j - 1 ] ) * 0.5 。

#include #include double dp[1251][1251];

int main()

for (i=1;i<=n;++i)

}printf("%.4lf",dp[n][n]);

return 0;

}

P2719 搞笑世界盃

p2719 搞笑世界盃 我覺得這個難度是假的,如果不知道這個是dp我就做不出來,好吧,知道我也沒做出來。f i j 表示剩i張a票,j張b票時,最後兩張票相同的概率。當前的隊首有一半的概率選a,一半的概率選b,so f i j 0.5 f i 1 j 0.5 f i j 1 答案為f n n 1 i...

題解 P2719 搞笑世界盃

其實懂了之後很簡單,但是剛開始真的很難想.d a b 表示剩a張a類票和b張b類票時,最後兩張票相同的概率 那麼此時的排隊的第乙個人只有兩種選擇 拿a類票或者b類票 拋硬幣得到的可能性當然是二分之一,所以說d i 1 j 當前第一人拿了a類票 和d i j 1 當前第一人拿了b類票 各佔二分之一 這...

P2719 搞笑世界盃 dp 思維

傳送門 題意 給出n張票,讓求最後兩個人買到相同票的概率,題目中a和b買票的概率是相同的,在一開始,用i,j分別表示剩餘的票數。dp i j 為當前的概率。狀態轉移方程為 dp i j 0.5 dp i 1 j dp i j 1 dp i 1 j 表示此時隊首選了a,dp i j 1 表示此時隊首選...