HDU 2262(高斯消元,概率DP)

2022-05-24 15:21:09 字數 2049 閱讀 6785

2015-04-13 22:49:30

思路:參考了愛神的部落格a的... 也改善了下高斯的模板。

首先給每個格仔編號,假設某個格仔(設為第 i 個)到終點的期望為ei,考慮第 i 格的所有可行後繼節點(可行節點的意思是這些後繼節點可以到達終點)

記為en1,en2....enk,總共k個,可列方程:ei = (en1+en2+en3+ ... + enk) / k + 1

轉化為:en1+en2+en3+ ... + k*eni = -k

如此這樣可以列出 n*m 條方程,高斯消元求出主元即可。終點的方程稍特殊:1*eed = 0

關於求可行後繼節點,可以從每個終點(注意,可能有多個出口)開始bfs求出。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include

11 #include 12 #include 13

using

namespace

std;

1415

#define mem(a,b) memset(a,b,sizeof(a))

16#define rep(i,n) for(int i=0;i<(n);++i)

17#define for(i,a,b) for(int i=(a);i<=(b);++i)

18#define getmid(l,r) ((l) + ((r) - (l)) / 2)

19#define mp(a,b) make_pair(a,b)

2021 typedef long

long

ll;22 typedef pairpii;

23const

int inf = (1

<< 30) - 1;24

const

int maxn = 20;25

const

int maxm = 250;26

const

double eps = 1e-9;27

28int

n,m,top;

29char

g[maxn][maxn];

30double

a[maxm][maxm];

31bool

can[maxn][maxn];

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

3334

void

bfs()

44while(!x.empty())56}

57}58}

59}6061

bool

gauss()

72for(int j = top; j >= col; --j) a[i][j] /=a[i][col];

73for(int k = 0; k < top; ++k) if(k !=i)

74for(int j = top; j >= col; --j)

75 a[k][j] -= a[k][col] *a[i][j];76}

77for(; i < top; ++i) if(!(fabs(a[i][top]) < eps)) return

false;78

return

true;79

}8081int

main()

93 rep(i,n) rep(j,m) if(g[i][j] != '#'

)100

int cnt = 0

;101 rep(k,4

)109

}110 a[a][a] = a[a][top] = -1.0 *cnt;

111}

112if(can[sx][sy] &&gauss())

119}

120}

121else printf("

-1\n");

122}

123return0;

124 }

HDU 4870(概率DP,高斯消元)

2015 04 24 23 55 19 題目 乙個人拿兩個號打比賽,初始rating為0,每次她都拿rating低的號來打,漲rating的概率為p,一次漲50,降rating的概率為1 p,一次降100,問讓某個號的rating漲到1000需要的期望比賽場數。思路 2個號只是拿來迷糊人的,把50看...

HDU 4326 Game(概率DP 高斯消元)

題意 就是現在有n個人標號從1到n排隊,每次隊首的4個人開始遊戲,4個人中每個人勝利的可能性是相等的,現在勝利的人會留在隊首,繼續遊戲,輸的人會回到隊尾 回到隊尾的順序與進入遊戲idea順序一致,比如說1,2,3,4比賽,2獲勝,則2留在隊首,1,3,4在隊尾的順序依舊是1,3,4 4在最後 現在如...

Apple 高斯消元 概率與期望

題目大意 有兩個變數x,y初始為0,每次x x 1 n或者y y 1 m。問第一次變成x x,y y時的期望步數。n,m 100 n,m le100 n,m 10 0題解 顯然直接列方程高消,可以將 n 1,m 1 看作0求 n 1 x,m 1 y 的答案。注意到可以只設最後一行或者最後一行一列求解...