【博弈論】關於蒙蒂霍爾問題(三門問題)的討論


洛谷期中考試的第三題,思維型非常強,其來源就是美國的三門問題,又稱:蒙蒂霍爾問題或山車問題。

三門問題的原型是這樣的:

「假設你正在參加一個游戲節目,你被要求在三扇門中選擇一扇:
其中一扇后面有一輛車;其余兩扇后面則是山羊。
你選擇了一道門,假設是一號門,然后知道門后面有什么的主持人,
開啟了另一扇后面有山羊的門,假設是三號門。
他然后問你:“你想選擇二號門嗎?”轉換你的選擇對你來說是一種優勢嗎?」

如果是按照人的【直覺】的話,肯定是每個門有車的概率都是1/3啊,所以換不換都一樣。

沒錯,我一開始也是這么想的,但是如果是這樣,那為什么還要把這種題放到NOIP的提高組里。實際上,上面的那種【直覺】是錯誤的,完全錯誤的!

再推了一大張打草紙后,發現對於這個問題,每次當主持人告訴你其中的一個錯誤選項后,你做出的覺得必須要換,換對你來說是一種優勢。

我們可以這么開看待這個問題:

1.當前選擇的那個門,有汽車的概率是33%,另外兩個門有汽車的概率是66%。 【到這里沒問題吧,神奇的在下面】

2.主持人告訴你另外兩個門中有一個門沒有汽車,那那個門就可以扔掉了,那剩下的那個門,擁有汽車的概率就66%。【是不是?是不是這樣看,轉換是有優勢的!】


接下來,對於該問題進行推廣,推廣到OI中:

題目描述

Bob 正在考試,他遇到了一個奇怪的選擇題:這個選擇題共有 n個選項,其中只有一個選項是正確的。他完全不會做這題,所以只能靠蒙。

蒙這道題分為 n−2n輪,在第 1 輪開始之前,Bob 會在這 n 個選項中隨機蒙一項,之后的每輪流程如下:首先,Alice 會過來幫他排除一個選項,由於 Alice 事先知道答案,所以她會在現有的除正確的那一項和 Bob 正在選的那一項外的選項里,隨機刪去一個。之后,Bob 可以選擇是否更換自己蒙的選項,如果更換,則隨機更換到除正在選的那一項之外的任意一項。

Bob 在這 n−2n  輪中,由於和 Alice 達成的神秘協定,需要恰好更換 kkk 次選項。他想知道,如何更換,使得自己蒙對的概率最大,輸出這個概率。為了方便,你需要輸出這個概率的分數形式在模 109+710^9 + 7 意義下的結果。

前k-1次更換選項,最后1次更換選項的機會要留到最后。可以推出遞歸式,然后解答即可。

代碼實現:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int MOD = (int)1e9 + 7;
int fexp(int a, int b) {
  int res = 1;
  for(int i = 1; i <= b; i <<= 1) {
    if(i & b) res = 1LL * res * a % MOD;
    a = 1LL * a * a % MOD;
  }
  return res;
}

int inv(int x) {
  return fexp(x, MOD - 2);
}

int f[MAXN], g[MAXN];
int main() {
  int n, k;
  scanf("%d %d", &n, &k);
  if(k == 0) {
    printf("%lld\n", 1LL * inv(n) % MOD);
  } else if(k == 1) {
    printf("%lld\n", 1LL * (n - 1) * inv(n) % MOD);
  } else {
    puts("GG");
  }
  return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM