乍一看比較難想到這是一道高斯消元的題目,因為概率不好轉移,得不到方程。
但是反過來想,用f(a,b)來表示,兩個人分別在a房間和b房間的期望。那麼這個期望是可以通過與其相連的房間的期望累加得到的:
這裡的f[p,q]是列舉的出發點,而p1是其對應的概率;
所以可以看出乙個多元帶有係數的方程,這才引出了高斯消元;
需要用乙個函式對 點對進行編號 code(i,j)
特別注意的是:
a[code(a,b)][tot+1]=-1
a,b是初始狀態,期望肯定是有乙個1的,移項後得-1;
下見**:
#include
#include
#include
#include
#include
#define eps 0.0000000001
#define cnt (n*n)
using
namespace
std;
int n,m,a1,b,d[50],mp[50][50];
double a[500][500],p[50];
int code(int i,int j)
void build(int x,int y)
} void gauss()
}}int main()
for(int i=1;i<=n;i++)scanf("%lf",&p[i]),mp[i][++d[i]]=i;//可留在原地,所以起始點多了自己;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
build(i,j);
gauss();
for(int i=1;i<=n;i++)
printf("%.6lf ",a[code(i,i)][cnt+1]/a[code(i,i)][code(i,i)]);
return
0; }
BZOJ 3270 博物館 概率 高斯消元
source實力透露做法。似乎有這麼個式子 f i,j pi p j f i,j 1 pi di p j f x,j 1 pj dj p i f i,y 1 pi di1 pjdj f x,y x adj i,y adjj 然後還有f a,b 1答案為f i,i 開n n個變數的方程組高斯消元?時間...
bzoj3270 博物館 期望 高斯消元
傳送門本題的點數很少,只有20個 考慮用二元組 s u,v 表示甲在 u 點,乙在 v 點的狀態 那麼可以用 f s 表示狀態 s 出現的概率 不同的 f 之間的轉移就是通過邊 轉移有4種情況 對於 s u,v 來說,有以下四種轉移 轉移一,甲乙都選擇不動,此時從 s 轉移到 s 概率為 p u p...
概率dp 高斯消元 bzoj3270 博物館
一類成環概率dp的操作模式 有一天petya和他的朋友vasya在進行他們眾多旅行中的一次旅行,他們決定去參觀一座城堡博物館。這座博物館有著特別的樣式。它包含由m條走廊連線的n間房間,並且滿足可以從任何一間房間到任何一間別的房間。兩個人在博物館裡逛了一會兒後兩人決定分頭行動,去看各自感興趣的藝術品。...