ZJUT 地下迷宮 (高斯求期望)

2021-06-25 18:29:50 字數 1314 閱讀 2119

設dp[i]表示在i點時到達終點要走的期望步數,那麼dp[i] = ∑1/m*dp[j] + 1,j是與i相連的點,m是與i相鄰的點數,建立方程組求解。重要的一點是先判斷dk到達不了的點,需要bfs預處理一下進行離散化,再建立方程組。

#include #include #include #include #include #include #include #include #include #include #include #include #include #define ll __int64

//#define ll long long

#define eps 1e-9

#define pi acos(-1.0)

using namespace std;

const int inf = 0x3f3f3f3f;

const int mod = 10000007;

int dir[4][2] = ,,,};

int n,m;

int cnt;

char g[15][15];

int equ,var;

double a[110][110];

double x[110];

int num[15][15];

int sx,sy,ex,ey;

struct node

;bool gauss()

if(fabs(a[row][col]) < eps)

for(i = row+1; i < equ; i++)

row++;

col++;

}for(i = row; i < equ; i++)

for(i = var-1; i >= 0; i--)

return true;

}void bfs()

); num[sx][sy] = cnt++;

while(!que.empty())

);num[x][y] = cnt++;}}

}}int main()

if(g[i][j] == 'e')}}

bfs();

equ = var = cnt;

memset(a,0,sizeof(a));

memset(x,0,sizeof(x));

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

else

for(int d = 0; d < 4; d++)}}

}} if(!gauss())

printf("tragedy!\n");

else if(fabs(x[num[sx][sy]]-1000000)

zjut 1423 (高斯消元 求期望)

此題為高斯消元求期望的入門題目,做法就是對圖中非x的點重新標號,令ei表示從該點出發到達終點的期望走過的步數,對於終點的e值顯然為0,最後的結果為起點的e值,方程也不難得到。注意普通的高斯消元化成上三角陣用在這類題目可能會有問題,因為會出現方程無解的情況,這樣在高斯消元最後一步回代的過程中會出現問題...

ZJUT 1423 地下迷宮(概率DP 高斯消元)

題目大意 由於山體滑坡,dk被困在了地下蜘蛛王國迷宮。為了搶在dh之前來到tft,dk必須盡快走出此迷宮。此迷宮僅有乙個出口,而由於大boss的力量減弱影響到了dk,使dk的記憶力嚴重下降,他甚至無法記得他上一步做了什麼。所以他只能每次等概率隨機的選取乙個方向走。當然他不會選取周圍有障礙的地方走。如...

ZJUT 1317 擲飛盤 (高斯解期望問題)

by cxlove 題目 有m個人,圍成乙個圈,有兩個飛盤,1 2的概率往左往右擲,最初兩個飛盤相隔n,問兩個飛盤到乙個人手中的期望次數為多少。每一次擲飛盤,有4種方案,兩個都順時針,兩個都逆時針,一順一逆。對於這4種方案,造成飛盤間隔的變化是有規律的 我們令e i 表示間隔為i時到目標狀態的所需步...