傳送門啦
這是寫第乙個概率期望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...