題目大意:
給出乙個n * m的矩陣,要求從左上角走到右下角,每次移動消耗兩點能量,並且每次的移動方向是有概率的(回到自身,往右或者往下)。輸入的矩陣中的每個位置有三個數,分別表示回到自身、向右移動、向下移動的概率,三者概率和為1,要求輸出從左上角走到右下角需要消耗的能量值的期望。(測試資料可能有點問題,會出現回到自身的概率為1從而導致死迴圈的情況)
解題思路:
每乙個位置到終點的能量消耗期望,和向右或向下移動之後走到的位置開始走到終點消耗的能量期望有關,所以可以用dp來做。由於有一定概率會回到自身,所以就會提公升一定難度,不過用數學方法推導一下就好了。
狀態轉移方程:dp[ i ][ j ] = (posi [ y ] * dp[ i ][ j+1 ] + posi [ z ] * dp[ i+1][ j ] + 2) / (1-posi [ a ])
其中posi [ a ]、posi [ b ]、posi [ c ]分別表示回到自身、到右邊的位置、到下面的位置的概率狀態轉移方程的推導:
假設當前位置為( x , y )回到自身的概率為a,向右移動的概率為b,向下移動的概率為c
且a + b + c = 1 , a >= 0 , b >= 0 , c >= 0;
因為存在多次先回到自身再向其他方向移動的情況,所以向右或向下移動所消耗的能量和回到自身的次數相關,存在以下關係:
d p[
x][y
]=
limn→
+∞∑i
=1n[
ai−1
⋅b(2
i+dp
[x][
y+1]
+ai−
1⋅c(
2i+d
p[x+
1][y
])
]dp[ x ][ y ] = \lim_ \sum_^n [a^\cdot b(2i+dp[x][y+1]+a^\cdot c(2i + dp[x+1][y])]
dp[x][
y]=n
→+∞limi
=1∑n
[ai
−1⋅b
(2i+
dp[x
][y+
1]+a
i−1⋅
c(2i
+dp[
x+1]
[y])
]把需要求和的每一項分開,發現是兩個同型的等比數列and兩個同型等差數列和等比數列的乘積,再分別計算求和得到下面的式子:
d p[
x][y
]=
limn→
+∞[(
b⋅dp
[x][
y+1]
+c⋅d
p[x+
1][y
])⋅1
−an−
11−a
+2⋅(
1−an
1−a−
(n−1
)⋅an
)]
dp[x][y] = \lim_[(b\cdot dp[x][y+1]+c\cdot dp[x+1][y])\cdot \frac}+2\cdot (\frac-(n-1)\cdot a^n) ]
dp[x][
y]=n
→+∞lim[
(b⋅d
p[x]
[y+1
]+c⋅
dp[x
+1][
y])⋅
1−a1
−an−
1+2
⋅(1−
a1−a
n−(
n−1)
⋅an)
]∵limn
→+∞1
−an−
1=
limn→
+∞1−
an=1
limn→
+∞an
=0
limn→
+∞n⋅
an=0
(0
<=a
<1)
∵ \lim_1-a^= \lim_1-a^n=1 \ \ \ \ \ \ \ \ \ \ \lim_a^n=0\ \ \ \ \ \ \ \ \ \lim_n\cdot a^n=0\ \ \ \ \ \ (0<=a<1)
∵n→+
∞lim1
−an−
1=n→
+∞lim1−
an=1
n→+∞
liman
=0n→
+∞limn⋅
an=0
(0<=a
<1)
∴ dp
[x][
y]=b
⋅dp[
x][y
+1]+
c⋅dp
[x+1
][y]
+21−
a∴dp[x][y] = \frac
∴dp[x]
[y]=
1−ab
⋅dp[
x][y
+1]+
c⋅dp
[x+1
][y]
+2
ac**:
#include
#include
using
namespace std;
static
const
int maxn =
1111
;struct node
;int n,m;
struct node node[maxn]
[maxn]
;double dp[maxn]
[maxn]
;double
solve
(int x,
int y)
intmain()
}memset
(dp,0,
sizeof
(dp));
printf
("%.3f\n"
,solve(1
,1))
;}return0;
}
HDU 3853LOOPS 簡單概率DP
hdu 3853 loops 題目大意是說人現在在1,1,需要走到n,n,每次有p1的可能在元位置不變,p2的可能走到右邊一格,有p3的可能走到下面一格,問從起點走到終點的期望值 這是弱菜做的第一道概率dp的題,首先是看了一下有關概率dp的資料,大概知道一般球概率就是從起點推到終點,求期望就是從終點...
簡單概率dp 期望 hdu 3853 LOOPS
題目大意 給乙個r c的矩陣,每個格仔 x,y 用2魔法值就可以走一步,可以到 x,y x 1,y x,y 1 告訴每個格仔的能到達的三個位置的概率,求從左上角到達右下角所需魔法值的期望。解題思路 簡單期望dp.dp i j 表示從位置 i,j 到達終點的期望,則dp i j 2 dp i j sa...
hdu 3853 LOOPS(概率DP求期望)
算是入門的第二題了。魔法師在迷宮中分別有p loop的概率停留,p right的概率走到 i,j 1 p down的概率走到 i 1,j 每走一次消耗2點魔法值。dp i j 表示從當前走到 r,c 所需要的魔法值,則有 dp i j dp i j p loop i j dp i j 1 p rig...