概率dp 九度 1546

2022-09-23 13:09:10 字數 1492 閱讀 8098

題目意思:

有乙個起點s,多個出口e,#代表不能走,每次等概率的隨機選擇下乙個可以行走的位置,求從s到出口的期望。

解題思路:

高斯消元求解期望。

先bfs預處理能夠到達的出口的位置,然後如果從起點不能到達終點,直接輸出-1.

然後對於無效的點,置該未知數的解為-1,否則依據dp[i][j]=1+dp[i-1][j]*1/4+dp[i][j+1]*1/4+dp[i+1][j]*1/4+dp[i][j-1]*1/4,構建n*m個方程,注意有些位置的可行位置數小於4,為cnt的話,此時的下一步概率為1/cnt.

然後解方程,求出唯一解。

ps:解方程時,如果有的未知數有解,有的無解,可以將無解的情況置乙個特殊值,然後按有唯一解的方式來解方程,避免無解未知數對有解未知數的影響。

方程係數要清零。wa了好幾次。

**:#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define eps 1e-8

#define inf 0x3f3f3f3f

#define pi acos(-1.0)

#define ll __int64

#define ll long long

#define lson l,m,(rt<<1)

#define rson m+1,r,(rt<<1)|1

#define m 1000000007

#pragma comment(linker, "/stack:1024000000,1024000000")

using namespace std;

#define maxn 20

char sa[maxn][maxn];

int n,m,num,dir[4][2]=,,,};

double dp[maxn][maxn],pp[maxn][maxn];

double g[maxn*maxn][maxn*maxn],ans[maxn*maxn];

bool vis[maxn][maxn];

void gaosi(int r,int c)

} bool iscan(int x,int y)

int sx,sy;

bool bfs() //從s出發找到所有可行的位置

} return flag;

} double dl(double a)

return 0;

}

概率DP初步

題目簡述 乙個r行c列的格仔,起始點在 1,1 終點在 r,c 每一步可能的走法有 不動 向右走 向下走,每走一步花費兩點魔法值,現給出在每一點三種走法的概率,求走完迷宮時所花魔法值的期望。分析 運用dp演算法的話,首先需要確定乙個合適狀態來描述子問題的情況,很明顯本題的狀態可以定義為dp i j ...

概率dp入門

概率dp主要用於求解期望 概率等題目。轉移方程有時候比較靈活。一般求概率是正推,求期望是逆推。通過題目可以體會到這點。poj2096 collecting bugs include include include include include typedef long long ll using ...

骰子 概率dp

因為會有人被彈出佇列,所以我設定的期望dp為 於是有當只剩乙個人的時候,那個人必勝,再往下,先看它在隊首的情況,其他的情況呢,也就是不在隊首的時候呢,於是,連立這兩個方程組,可以得到 所以,就可以利用乙個pow來處理double型來解決這個問題了。include include include in...