洛谷P1850 換教室

2022-04-05 22:35:14 字數 1480 閱讀 7284

傳送門啦

這是寫第乙個概率期望dp。

一般看見這種題就想暴力了,看一下資料範圍,暴力應該還是挺好想的吧。

24分注意到有6個測試點m=0m=0,則說明不能提出申請,那麼只需要求出全圖的兩兩之間的最短路,路徑唯一確定。

52分注意到另外有7個測試點m=1m=1,只能提出一次申請。我們可以直接列舉在**提出申請,再與不申請的時候取乙個min就可以了。

76分注意到還有6個測試點m=2m=2,只能提出兩次申請,暴力列舉哪兩個點申請即可。

80分其實我們並不需要分那麼多類情況討論,考慮直接爆搜,在每個點是否提出申請,最後暴力計算貢獻。因為這樣的複雜度是c(n ,m)​的,所以m<=2和n<=10是完全沒有問題的,直接可以用搜尋拿到80分。

接下來就讓我們看一下正解,概率期望dp + floyd

我們設f[i][j][0/1]:表示前 i 門課程,已經申請 j 間教室,這間教室有沒有申請的最小的期望值 狀態轉移方程:

其實剛開始看到轉移方程的我是崩潰的。但是轉移挺好想的,很順(舒服)。

#include #include 

#include

#include

using

namespace

std;

const

int maxn = 2005

;const

int inf = 0x7fffffff

;inline

intread()

while(ch >= '

0' && ch <= '9'

)

return x *f;

}int

n,m,v,e,x,y,z;

intc[maxn],d[maxn];

double k[maxn],f[maxn][maxn][2

],ans;

intdis[maxn][maxn];

void

floyd()

intmain()

else

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

dis[i][i] = 0

; floyd();

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

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

f[i][j][

0] = f[i][j][1] =inf;

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

;

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

ans =inf;

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

printf(

"%.2lf

",ans);

return0;

}

媽呀,終於寫完了。。

洛谷P1850 換教室

心力憔悴。不知道說什麼。方程還是很好推的,我也很快就推出來了。結果 花了4h 重構了幾遍 才終於意識到這樣寫有問題。真是。include include include include using namespace std const int maxn 2e3 20 const int maxm ...

洛谷P1850 換教室

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

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