配對遊戲 概率DP)

2022-07-19 14:06:15 字數 1602 閱讀 6120

美團點評是綜合性生活服務平台,覆蓋吃喝玩樂。在休閒娛樂版塊,有很多轟趴、桌遊、密室逃脫類的專案,適合多人一起玩。下面就是出自團隊遊戲場景中的乙個問題。

有 n 個人排成一排,一開始全部面向前方,然後大家一起轉身,隨機朝左或是朝右轉。

轉身後,不斷檢查佇列,如果存在兩個面對面的相鄰的人,則將這兩個人從佇列中消除;直到不存在兩個面對面的相鄰的人。

例如 > 表示向右, < 表示向左

佇列「>>><<<」的消除過程為,「>>><<<」到「>><<」到「><」到「」(每次去除一對),最後剩下人數為0。

佇列「>><><<<>」的消除過程為,「>><><<<>」到「>><<<>」到「><<>」到「<>」(每次去除一對),最後剩下人數為2

求最後剩下人數的期望值。

一行乙個正整數 n (1 ≤ n ≤ 2000)。
一行乙個實數,表示剩下人數的期望值,四捨五入保留三位小數。
示例1

複製

10

複製

4.168

這裡提供兩種解題思路(見**)

#includeusing namespace std;

const int maxn=2005;

double dp[maxn][maxn];//前i個人還有j個人向右消除了的期望數

double dp1[maxn][maxn];//達到dp[i][j]的概率

/*考慮第i個人:

如果他向右那麼dp[i][j+1] += dp[i-1][j]/2 dp1[i][j+1] += dp1[i-1][j]/2

如果他向左那麼dp[i][j-1] += dp[i-1][j]/2 + dp1[i-1][j] dp1[i][j-1] += dp1[i-1][j]/2

注意j為0的時候

*/ const double tem=0.5;

double ans[maxn];

int main()

else

} }for(int i=1;i#includeusing namespace std;

const int maxn=2005;

double dp[maxn][maxn];//前i個人還有j個人向右剩下的期望數

double dp1[maxn][maxn];//達到dp[i][j]的概率

/*考慮第i個人:

如果他向右那麼dp[i][j+1] += dp[i-1][j]/2+dp1[i-1][j] dp1[i][j+1] += dp1[i-1][j]/2

如果他向左那麼dp[i][j-1] += dp[i-1][j]/2 - dp1[i-1][j] dp1[i][j-1] += dp1[i-1][j]/2

注意j為0的時候

*/ const double tem=0.5;

double ans[maxn];

int main()

else

} }for(int i = 1;i < maxn; i++)

} int n;

while(scanf("%d",&n)!=eof)

printf("%.3lf\n",ans[n]);

return 0;

}

賭博遊戲 概率dp

題目描述 最近西雅圖的高中校園裡流行這樣乙個遊戲。我們有乙個骰子,這個骰子有 m 個面,分別寫著 1.m 並且是個公平的骰子,換句話說,一次投擲時每個面朝上的概率是相同的。遊戲的組織者使用這個骰子進行 n 次投擲,並且告訴玩家點數 v 出現了至少一次。那麼玩家需要猜測 n 次投擲的點數之和。如果猜對...

概率期望dp入門題 遊戲

題目 alice 和 bob 兩個人正在玩乙個遊戲,遊戲有很多種任務,難度為 p 的任務 p是正整數 有 1 2 p 的概率完成並得到 2 p 1 分,如果完成不了,得 0 分。一開始每人都是 0 分,從 alice 開始輪流做任務,她可以選擇任意乙個任務來做 而 bob 只會做難度為 1 的任務。...

Alice 與 Bob 的遊戲 (概率DP

題目描述 alice 和 bob 兩個人正在玩乙個遊戲,遊戲有很多種任務,難度為 p 的任務 p是正整數 有 1 2 p 的概率完成並得到 2 p 1 分,如果完成不了,得 0 分。一開始每人都是 0 分,從 alice 開始輪流做任務,她可以選擇任意乙個任務來做 而 bob 只會做難度為 1 的任...