HDU3853 LOOPS簡單期望

2021-08-09 05:19:45 字數 1557 閱讀 4345

這題還算比較簡單的,不過有個位置有個小坑需要注意,不然狂wa不止

hdu3853傳送門

乙個r*c的迷宮,你一開始在左上角[1,1]處,出口在右下角[r,c]處。

你可以進行移動操作,每一次操作將會消耗2魔法值。每一次操作你都有機率向下,向右移動,或者停留在原地。問走出迷宮期望消耗的魔法值。

多組資料,eof結束

對於每一組資料:

第一行r , c表示r行c列矩陣

接下來r行每行c個實數三元組[a,b,c],分別表示在該位置進行移動時,呆在原地,向右移動,向下移動的概率。

每組資料輸出一行乙個實數(保留三位小數),表示答案。

input

2 2

0.00 0.50 0.50    0.50 0.00 0.50

0.50 0.50 0.00    1.00 0.00 0.00

output

6.000

確實是乙個很簡單的期望dp。

由:期望=概率*權值

有:當前狀態期望=子狀態1概率 * 子狀態1期望+子狀態2概率 * 子狀態2期望 + ······

設mag[i][j]表示從[i,j]走到[r,c]的期望消耗魔法值,很明顯mag[r][c]為0,用這個倒推,得到其他點的期望計算公式(也就是狀態轉移方程): ma

g[i]

[j]=

(mag

[i][

j]∗s

tay[

i][j

]+ma

g[i]

[j+1

]∗ri

ght[

i][j

]+ma

g[i+

1][j

]∗do

wn[i

][j]

+2)

移項得: ma

g[i]

[j]=

(mag

[i][

j+1]

∗rig

ht[i

][j]

+mag

[i+1

][j]

∗dow

n[i]

[j]+

2)/(

1−st

ay[i

][j]

) 注意,當stay[i][j]=1時,這個mag[i][j]的計算式是無效的,因為它根本到不了[r,c]點,因此對於這種情況,根據定義直接mag[i][j]=0就好了

完了直接倒著推就好了=w=

#include 

#include

#include

using namespace std ;

int r , c ;

double dw[1005][1005] , rg[1005][1005] , sy[1005][1005] ;

double mag[1005][1005] ;

int main()

}printf( "%.3f\n" , mag[1][1] ) ;

}}

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(不錯的入門經典)

題意 給出乙個r c的迷宮,每個格仔可以走到 r,c r 1,c r,c 1 概率分別為p1 p2 p3 沒走一次消耗2各單位的能量,問從 1,1 走到 r,c 的平均能量 解析 設dp i j 表示 i,j 到 r,c 需要消耗的能量 則 dp i j p1 i j dp i j p2 i j d...