【HDOJ6229】Wandering Robots(馬爾科夫鏈,set)
題意:給定一個n*n的地圖,上面有k個障礙點不能走,有一個機器人從(0,0)出發,每次等概率的不動或者往上下左右沒有障礙的地方走動,問走無限步後停在圖的右下部的概率
n<=1e4,k<=1e3
思路:據說是找規律
From https://blog.csdn.net/anna__1997/article/details/78494788 牛逼的證明
馬爾科夫鏈的隨機遊走模型
-
可建立狀態轉移矩陣,對n * n 的圖中n * n 個點編號為0 ~[ (n - 1) * n + n – 1] 設最大編號為max
P = p(i, j) = [p(0, 0) p(0, 1) … p(0, max)
P(1, 0) p(1, 1) … p(1, max)
…
P(max, 0) p(max, 1) … p(max, max)]
π(i) 為i時間各點的概率
π(n + 1) = π(n) * P
當時間->無窮 π(n + 1)->π
可以通過 π * P = π 計算
驗證猜測結果正確
*******************************************************
找規律的答案 有待證明
現在能想到的是 整個封閉系統每個格子以出現機器人的概率作為權值 在很長的時間線上是一個熵增的
過程(想到元胞自動機),如果要模擬這個概率擴散的過程的話,格子的權值的更新是一個用他所能到達的格子的權值
和他自身的權值叠代的過程,這個過程中可以發現他的相鄰的格子的權值是在不斷同化的,因此,在無窮遠後
(0, 0)的和他周圍的格子的權值不在體現優勢,而更加開放的格子則更占優(可根據叠代公式理解)
*******************************************************
考慮每個障礙點對答案的影響,找規律後的得到只與障礙點所在的位置與周圍的聯通情況有關
判格子是不是障礙可以用set
1 #include<cstdio> 2 #include<cstring> 3 #include<string> 4 #include<cmath> 5 #include<iostream> 6 #include<algorithm> 7 #include<map> 8
【HDOJ6229】Wandering Robots(馬爾科夫鏈,set)