hdu 3853 LOOPS(概率DP求期望)

2021-09-30 10:43:04 字數 1193 閱讀 6979

算是入門的第二題了。

魔法師在迷宮中分別有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_right[i][j]+dp[i][j+1]*p_down[i][j]+2;

移項化簡後有:dp[i][j]=dp[i][j+1]*p_right[i][j]/(1-p_loop[i][j])+dp[i+1][j]*p_down[i][j]/(1-p_loop[i][j])+2/(1-p_loop[i][j]);

因為分母不能為零,所以要保證(1-p_loop[i][j])不為零。

#include#include#include#include#include#include#include#include#include#define mm(a,b) memset(a,b,sizeof(a))

#define maxn 1010

using namespace std;

const int inf=0x7ffffff;

const double pi=acos(-1.0);

const double eps=1e-8;

const double e=2.7182818284590452354;

double dp[maxn][maxn];

double p_loop[maxn][maxn];

double p_right[maxn][maxn];

double p_down[maxn][maxn];

int main()

{ int r,c;

while(~scanf("%d%d",&r,&c))

{ mm(dp,0);

for(int i=1;i<=r;i++)

for(int j=1;j<=c;j++)

scanf("%lf%lf%lf",&p_loop[i][j],&p_right[i][j],&p_down[i][j]);

dp[r][c]=0;

for(int i=r;i>=1;i--)

for(int j=c;j>=1;j--)

{if(i==r && j==c) continue;

if((1-p_loop[i][j])

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...

HDU3853 LOOPS 概率DP數學期望

題目大意 給出乙個n m的矩陣,要求從左上角走到右下角,每次移動消耗兩點能量,並且每次的移動方向是有概率的 回到自身,往右或者往下 輸入的矩陣中的每個位置有三個數,分別表示回到自身 向右移動 向下移動的概率,三者概率和為1,要求輸出從左上角走到右下角需要消耗的能量值的期望。測試資料可能有點問題,會出...