2016 NOIP提高組 換教室 題解

2021-10-23 05:01:58 字數 1418 閱讀 7250

題目傳送門

題目大意:牛牛要上 n

nn 天課,第 i

ii 天在 c[i

]c[i]

c[i]

號教室,可以申請換至多 m

mm 天的教室,第 i

ii 天有 p[i

]p[i]

p[i]

的申請成功機率,申請成功的話就可以在 d[i

]d[i]

d[i]

號教室上課,第 i

ii 天上完課後要走到第 i+1

i+1i+

1 天的課室,給出一張圖,代表教室之間的通道情況,問申請哪些教室可以使期望路程最短。

首先這個圖只有 300

30030

0 個點,用 flo

yd

floyd

floy

d 就可以求出任意兩點的最短路。

然後就是個簡單的 01

0101

揹包,每天只有申請和不申請兩種狀態,設 f[i

][j]

[0/1

]f[i][j][0/1]

f[i][j

][0/

1]表示前 i

ii 天申請了 j

jj 次,並且第 i

ii 天選擇申請(1

11)或不申請(0

00),然後大力從前一天轉移過來即可。

轉移的時候重點考慮選的天,如果這天被選了,就有 p[i

]p[i]

p[i]

的概率在 c[i

]c[i]

c[i]

教室,有 (1−

p[i]

)(1-p[i])

(1−p[i

])的概率在 d[i

]d[i]

d[i]

教室,如果第 i

ii 天和第 i−1

i-1i−

1 天同時選,那麼就有 4

44 種情況需要大力分類討論然後把它們的期望加起來。

(這麼醜的dp居然一次ac了qwq可喜可賀)

細節就看**吧(不算醜qwq):

#include

#include

using

namespace std;

#define maxn 2010

#define inf 999999999.0

int n,m,v,e,c[maxn]

,d[maxn]

;double p[maxn]

,dp[maxn]

[maxn][2

];int f[

310]

[310];

void

floyd()

voiddp(

)}intmain()

NOIP 2016 提高組 換教室

先用弗洛伊德求出兩兩點的最短路,設dp fi j,0 表示當前走到了i這個點,申請了j次,在原點的期望距離,fi j,1 表示當前走到了i這個點,申請了j次,在申請點的期望距離 當然要加上沒有申請成功走到原點的期望距離 轉移 設ds 0 1,0 1 表示從上一輪的原點 申請點到當前的原點 申請點距離...

NOIP2016提高組 換教室

題面很長,實質很水的一道期望dp題。題面自帶勸退效果。首先用floyd算出任意兩點的最短路徑。然後設f i,j,0 為前i節課申請更換j節,且不申請第i節時的最小期望 設f i,j,1 前i節課申請更換j節,且申請第i節時的最小期望。可得下面這個超長的狀轉方程 f i,j,0 min f i,j,1...

洛谷 1850 NOIP2016提高組 換教室

題解 先用floyed處理出兩點間的最短路。設f i j k 表示走到第i個教室,總共換了j次,當前換或者不換,期望的最小移動距離。分情況討論來轉移即可。1 include2 include3 include4 define ll long long 5 define rg register 6 d...