p1850-solution

P1850 Solution

link

看到最小期望值,考虑dp。

由于点的数量小于 \(300\),我们可以先用 Floyd 预处理出两点之间的最短路。

\(dp_{i,j,0/1}\) 表示前 \(i\) 间教室申请了 \(j\) 间,第 \(i\) 间教室是否申请的最小期望长度。

下面设 \(a\) 表示 \(c_{i-1}\)\(b\) 表示 \(d_{i-1}\)\(c\) 表示 \(c_i\)\(d\) 表示 \(d_i\)

初始化:\(dp_{1,0,0}=dp_{1,1,1}=0\)

转移:如果第 \(i\) 间教室不申请,

\(dp_{i,j,0}=\min\{dp_{i-1,j,0}+dis_{a,c},dp_{i-1,j,1}+dis_{b,c}\times k_{i-1}+dis_{a,c}\times (1-k_{i-1})\}\)

如果第 \(i\) 间教室申请,

\(dp_{i,j,1}=\min\{dp_{i-1,j-1,0}+dis_{a,d}\times k_i+dis_{a,c}\times (1-k_i)\ \ ,\ \ dp_{i-1,j-1,1}+dis_{b,d}\times k_{i-1}\times k_i+dis_{a,d}\times(1-k_{i-1})\times k_i+dis_{b,c}\times k_{i-1}\times(1-k_i)+dis_{a,c}\times(1-k_{i-1})\times(1-k_i)\}\)

最后输出 \(\min\{dp_{n,i,0/1}\},i\in[0,m]\) 即可。

posted @ 2024-03-01 09:02  iorit  阅读(7)  评论(0)    收藏  举报