洛谷P1850 題解 換教室

2022-05-16 11:10:17 字數 1546 閱讀 5951

題目戳此

乙個比較毒瘤的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.前失敗後成功

4.前後均失敗

(2)i-1未申請

1.i申請成功

2.i申請失敗

以上九種情況都體現在**裡了:

1 #include2

#define ll long long

3#define rg register

4#define us unsigned

5#define eps 1e-6

6#define inf 0x3f3f3f3f

7#define ls k<<1

8#define rs k<<1|1

9#define tmid ((tr[k].l+tr[k].r)>>1)

10#define nmid ((l+r)>>1)

11#define thispoint tr[k].l==tr[k].r

12#define pushup tr[k].wei=tr[ls].wei+tr[rs].wei

13using

namespace

std;

14 inline void read(int &x)

22while(c>='

0'&&c<='9'

)26 x*=f;27}

28int

n,m,v,e;

29int c[2010],d[2010],dis[310][310

];30

double k[2010],f[2010][2010][2

];31 inline void

initi()37}

38for(int i=1;i<=n;i++)read(c[i]);

39for(int i=1;i<=n;i++)read(d[i]);

40for(int i=1;i<=n;i++)cin>>k[i];

41for(int i=1;i<=e;i++)47}

48 inline void

floyd()55}

56}57}

58}59 inline void

dp()64}

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

;66 f[1][1][1]=0;67

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

74}75}

76 inline void

print()

82 printf("

%.2lf\n

",ans);83}

84int

main()

完結撒花~~~

洛谷P1850 換教室

傳送門啦 這是寫第乙個概率期望dp。一般看見這種題就想暴力了,看一下資料範圍,暴力應該還是挺好想的吧。24分注意到有6個測試點m 0m 0,則說明不能提出申請,那麼只需要求出全圖的兩兩之間的最短路,路徑唯一確定。52分注意到另外有7個測試點m 1m 1,只能提出一次申請。我們可以直接列舉在 提出申請...

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