數學期望 BZOJ 1415

2021-07-31 10:26:20 字數 1224 閱讀 5523

description

題解 既然是平均情況,顯然就是求數學期望。我們會發現,每乙個時刻貓鼠之間的最短路徑一定是減小了,所以不會出現轉圈的情況,所以可以用記憶化搜尋,用f[

x][y

] 表示貓在節點x,鼠在節點y,貓鼠相遇的期望值。題目中最終要的就是要知道貓的下一步會走到**,可以列舉每個點,然後bfs刷最短路,最後列舉一下,o(

n2) 的複雜度就可以構造出來。所以轉移方程:f[

x][y

]=1+

∑dp(

nxt,

son[

j])d

egre

e[y]

+1其中nxt表示貓下一步走到的節點。顯然,如果x=y,f[

x][y

] =0,如果貓走的時候已經抓到了老鼠,那麼f[

x][y

]=1 ;

給出**:

#include

#include

#include

#define maxn 1006

using

namespace

std;

int n,e,p1,p2,tot,lnk[maxn],son[maxn*2],nxt[maxn*2],ent[maxn],dis[maxn],que[maxn],

p[maxn][maxn];

bool vis[maxn];

double inf,f[maxn][maxn];

int _read()

void add(int x,int y)

void bfs(int x)

}}double dp(int x,int y)

if(f[x][y]!=inf)return f[x][y];

if(p[x][y]==y)return f[x][y]=1;

if(p[p[x][y]][y]==y)return f[x][y]=1;

f[x][y]=1;

f[x][y]+=dp(p[p[x][y]][y],y)/(ent[y]+1);

for(int j=lnk[y];j;j=nxt[j])if(son[j]!=x)

if(p[x][son[j]]!=son[j]) f[x][y]+=dp(p[p[x][y]][y],son[j])/(ent[y]+1);

return f[x][y];

}int main()

bzoj 1415 聰聰和可可 期望

可以先預處理出當聰聰在 i 點,可可在 j 點時,聰聰下一步到達的點的編號,記為p i,j bfs即可。設f i,j 表示聰聰在 i,可可在 j 時的期望步數,w i,j 為與i相鄰的第 j 個點編號,t i 為 i 點的度數,則有f i,j t i k 1f p p i j j w j,k f p...

BZOJ 1415 聰聰和可可 期望DP

我們可以用n次bfs預處理出 to陣列,to i j 表示聰聰從i點到j點第一步會走哪個點。那麼對於聰聰在i點,可可在j點,聰聰先走,定義dp i j 表示步數期望。那麼顯然有dp i j sigma dp p w dp p j dee j 1 1.其中p表示to to i j j w表示j點鄰接的...

bzoj1415 聰聰和可可

對於任意一對位置x,y我們可以找到聰聰的行走方案。這個可以bfs跑 然後我們用f x,y 表示聰聰在x,可可在y抓住的期望時間,於是轉移方程是 if x y f x y 0,if x走兩步能到y f x y 1,else f x y sigma f x nxtpos y nxtpos 1 d y 1...