有乙個遊戲平板上面有n×m個格仔,一開始每個格仔都是關閉的,每個格仔裡面都有乙個標記
已知每種標記恰好出現兩次,也就是一共有n*m/2種標記
規定一次移動為依次(one by one不是同時)開啟一對格仔檢視裡面的標記,如果標記不一樣,格仔會自動關閉,但是你的記憶是超強了,看過了就不會忘,如果標記是一樣的,格仔從此就一直保持開啟狀態,當所有格仔都開啟時遊戲結束
請算出遊戲結束的最少期望步數
首先設dp[i][j]表示i個開啟了,j個沒開啟的期望.然後就是轉移了.
dp是由已知向未知轉移的.那麼,我們怎麼轉移呢?眾所周知轉移是憑藉兩個for
而轉移的for是根據dp方程來的,所以我們來列一下dp方程.
好,我們肯定是要開箱子了,即dp[i][j]…
dp[i][j]
我們需要開兩個箱子,開出來的兩個箱子有4種情況…
第一種,我開啟的這兩張,我第一張之前翻開過,那麼我下一張肯定是翻我之前的那張.
顯然,我翻到這種的可能性是p=i/j.然後這樣dp[i][j]=(dp[i-1][j-1]+1)p.
第二種,我開啟的這兩張,第一張無對應,然後開第二張,1,2對應.
在i+j中翻一張牌,第一張不對應的可能性是1-p,然後1,2對應的可能性是a=1/(j-1).因為一定有兩張對應,這樣的dp就是.
dp[i][j]+=(1-p)(a*(dp[i][j-2]+1)).//注意i記錄開啟了但是沒被消除的.
第三種,我開啟的兩張,第一張無對應,然後開第二張,1,2不對應,且2與已知無對應.
第一張無對應就是(1-p),第二張和第一張和已知不對應的概率是b=((j-1)-1-i)/(j-1)=(j-2-i)/(j-1).
dp[i][j]+=(1-p)(b(dp[i+2][j-2]+1)).
第四種,我開啟的兩張,第一張無對應,然後開第二張,1,2不對應,且2與已知對應.
第一張無對應就是(1-p),第二張和第一張不對應但和已知對應的概率c=1-a-b.
dp[i][j]+=(1-p)(c(dp[i][j-2]+2)).
觀察i,j的大小,j放第一維,i放第二維是可以的.因為i+2>i,不可能把i放第一維的.
#include
using
namespace std;
const
int n=
2505
;double dp[n]
[n];
intmain()
}}printf
("%.15f\n"
,dp[0]
[n])
;return0;
}
概率期望dp入門題 遊戲
題目 alice 和 bob 兩個人正在玩乙個遊戲,遊戲有很多種任務,難度為 p 的任務 p是正整數 有 1 2 p 的概率完成並得到 2 p 1 分,如果完成不了,得 0 分。一開始每人都是 0 分,從 alice 開始輪流做任務,她可以選擇任意乙個任務來做 而 bob 只會做難度為 1 的任務。...
dp基礎之網格問題
及注釋如下 usr bin python def get case m,n m,n分別為網格的行列數 建立乙個列表 f i j 表示從左上開始到第i行第j列的點的路徑數 f 0 for x in range n for y in range m f 0 0 表示初始情況 f 0 0 1 for i ...
期望及期望dp
簡單說就是概率 概率的價值 osu x 1 3 x3 3x2 3x 1 可以看出每多出乙個1,答案就會增加3x2 3x 1 於是可以維護x和x2的期望 x1 i x1 i 1 1 p i x2 i x2 i 1 2 x1 i 1 1 p i ans i ans i 1 3 x2 i 1 3 x1 i...