P1850 換教室 題解

2022-05-15 07:37:46 字數 2053 閱讀 9840

題意:

有 v 間教室, 教室之間有 e 條雙向邊連線, 從乙個教室走到另乙個教室需要一

定時間. 有 n 節課, 第 i 節課有兩間教室, 預設要去第 c[i] 間教室, 可以申請到

第 d[i] 間教室去, 申請通過的概率為 p[i], 所有申請必須在最開始提交. 求出提

交申請個數不超過 m 的情況下, 依次上完這 n 節課期望最少要走多遠.

v ≤ 300, e ≤ 90000, n ≤ 2000.

前置知識:

1.全概率公式:

p(a)=\sum_^

2.隨機變數是在概率空間的基本變數上定義的函式.

記 e(x) 為隨機變數 x 的期望值

e(x)=\sum_^

可以看做概率乘以權值。

3.期望具有線性性:

e(ax + y ) = ae(x) + e(y )

題解思路:

每節課之間要走的路程的期望之和可以根據期望的線性性,

求出每乙個路程的期望,累加即可。

1.先用floyd求出最短路。

2.f[i][j][0/1]表示上完第i節課後,用了j次申請,第i節課是否換教室,期望路程的最小值。

3.因為它只是期望,如果有期望得到申請,也得加上期望沒有得到申請的情況。

4.轉移方程比較噁心,我就不貼了。

**:

#include#include

#include

#include

#include

#include

#define ll long long

#define r register

using

namespace

std;

const

int n=2005

;const

int m=2005

;const

int inf=200000000;//

14299.96

//f[i][j][0/1] 到第i節課 用了 j 個 申請 第i節課換不換的期望

intn,m,v,e,c[n],d[n],far[m][m];

double f[n][n][2],k[n],ans=inf;

intmain()

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

far[i][i]=0

;

for(r int t=1;t<=v;t++)

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

for(r int j=1;j<=v;j++)

far[i][j]=min(far[i][j],far[i][t]+far[t][j]);

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

for(r int j=0;j<=m;j++)

for(r int t=0;t<=1;t++)

f[i][j][t]=inf;

f[1][0][0]=0

; f[

1][1][1]=0

;

for(r int i=2;i<=n;i++)

}for(r int i=0;i<=m;i++)

printf(

"%.2lf

",ans);

return0;

}

洛谷P1850 題解 換教室

題目戳此 乙個比較毒瘤的dp題。設f i j 1 0 為前i個時段 申請j次 第i個時段申請成功與否 思考下面幾種情況 一 i未申請f i j 0 1 i 1申請 1.i 1申請成功 2.i 1申請失敗 2 i 1未申請 二 i申請f i j 1 1 i 1申請 1.前後均成功 2.前成功後失敗 3...

P1850 換教室 概率dp

其實說是概率dp,本質上和dp沒什麼區別,就是把所有可能轉移的情況全列舉一下就行了,不過dp方程確實有點長。ps 這個題的floyed我竟然之前寫跪了。題目 題目描述 對於剛上大學的牛牛來說,他面臨的第乙個問題是如何根據實際情況申請合適的課程。在可以選擇的課程中,有 2n2n2n 節課程安排在 nn...

P1850 換教室 期望DP

對於剛上大學的牛牛來說,他面臨的第乙個問題是如何根據實際情況申請合適的課程。在可以選擇的課程中,有 2n2n2n 節課程安排在 nnn 個時間段上。在第 iii 1 i n1 leq i leq n1 i n 個時間段上,兩節內容相同的課程同時在不同的地點進行,其中,牛牛預先被安排在教室 cic i...