設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時到目標狀態的所需步...