遊走 HNOI2013 期望Dp 高斯消元

2021-10-02 15:27:50 字數 2780 閱讀 8577

vjudge

乙個無向連通圖,頂點從1編號到n,邊從1編號到m。

小z在該圖上進行隨機遊走,初始時小z在1號頂點,每一步小z以相等的概率隨機選 擇當前頂點的某條邊,沿著這條邊走到下乙個頂點,獲得等於這條邊的編號的分數。當小z 到達n號頂點時遊走結束,總分為所有獲得的分數之和。

現在,請你對這m條邊進行編號,使得小z獲得的總分的期望值最小。

無向圖考慮

a ns

=∑i=

1mei

∗val

ians=\sum_^m

ans=∑i

=1m​

ei​∗

vali

​其中 e

ie_i

ei​ 為第 i

ii 條邊經過期望次數

顯然 e

ie_i

ei​ 大的配 val

ival_i

vali

​ 小的

如果我們的邊拆點的話點太多了,因為這種有依賴性的 dpdp

dp一般要用高斯消元

考慮 e

ie_i

ei​ 的期望可以利用期望的線性性使得

e i=

fude

u+fv

de

ve_i=\frac+\frac

ei​=de

u​fu

​​+d

ev​f

v​​,其中 fu,

fv

f_u,f_v

fu​,fv

​ 為經過點的期望次數

轉化為求點的經過期望次數

根據期望的線性性列出狀態轉移方程:

f u=

∑v∈t

oufv

dev+

[u==

1]

f_u=\sum_\frac+[u==1]

fu​=∑v

∈tou

​​de

v​fv

​​+[

u==1]f1

f_1f1

​ 會加1是因為一來就在 1

11根據 e

ie_i

ei​ 的變形可以推出 fn=

0f_n=0

fn​=

0 (可理解為隨機遊走時候一碰到 n

nn 點就消失了)

變形後高斯消元即可

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define ll long long

//#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? eof : *p1++)

//char buf[(1 << 21) + 1], *p1 = buf, *p2 = buf;

inline

intread()

while

('0'

<=c&&c<=

'9') x=

(x<<3)

+(x<<1)

+(c^48)

,c=getchar()

;return

!f?x:

-x;}

#define maxn 500

#define inf 0x3f3f3f3f

int de[maxn+5]

;vector<

int> g[maxn+5]

;double a[maxn+5]

[maxn+5]

;double

abs(

double x)

void

print

(int n)

void

guass

(int n)

//print(n);

}for

(int i=

1;i<=n;i++

) a[i]

[n+1]/

=a[i]

[i];

//print(n);

return;}

double e[maxn*maxn+5]

;int u[maxn*maxn+5]

,v[maxn*maxn+5]

;int

main()

for(

int u=

1;ua[1

][n]=1

;guass

(n-1);

for(

int i=

1;i<=m;i++

) e[i]

=a[u[i]

][n]

/de[u[i]

]+a[v[i]

][n]

/de[v[i]];

sort

(e+1

,e+m+1)

;double ans=0;

for(

int i=

1;i<=m;i++

) ans+

=(m-i+1)

*e[i]

;printf

("%.3lf\n"

,ans)

;return0;

}

HNOI2013 遊走題解

題目鏈結 給你乙個 n 個點 m 條邊的無向連通圖從 1 號點出發,每次隨機選擇當前頂點的某條邊走到下乙個點,並獲得這條邊的分數,分數為這條邊的編號,一旦到了 n 號點就結束遊走,總分為獲得分數的總和。安排每條邊的編號,使總分的期望值最小,並輸出最小的期望值 看完題目能夠發現,我們只要求出經過每一條...

bzoj3143 Hnoi2013 遊走 期望

顯而易見,要最小化總分就要讓期望經過次數最多的邊權值最小。而邊的期望可以通過點的期望匯出。點的期望又可以通過和它相連的點的權值匯出。就可以列成一組方程。再高斯消元一下就可以解出來了。include include include includeusing namespace std const do...

HNOI2015 期望dp 亞瑟王

描述 小 k 不慎被 ll 邪教 了,程度深到他甚至想要從亞瑟王邪教中脫坑。他決定,在脫坑之前,最後再來打一盤亞瑟王。既然是最後一戰,就一定要打得漂 亮。眾所周知,亞瑟王是乙個看臉的遊戲,技能的發動都是看概率的。作為乙個非 洲人,同時作為乙個前 oier,小 k 自然是希望最大化造成傷害的期望值。但...