码迷,mamicode.com
首页 > 其他好文 > 详细

●codeforces 553E Kyoya and Train

时间:2018-01-24 15:35:33      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:最小   target   blog   ble   概率   起点   分层   mes   转移   

题链:

http://codeforces.com/problemset/problem/623/E

题解:

FFT,DP

题意:

一个有向图,给出每条边的起点u,终点v,费用c,以及花费每种时间的概率P[e][j](表示走第e条边花费时间为j的概率)

现在需要从1号点走到n号点,如果不能在T个单位时间内到达,则达到后还要另外支付X的费用。

求出所需支付的最小期望费用。


先是一个暴力的DP方案:

(考虑到每条边的耗时至少为1,可以把状态设为类似分层图的形式)

定义$F[i][t]$为$t$时刻在$i$点时,到达终点n所需要的最小期望费用。

不难的到DP转移,枚举每条从i点的出边:

$$F[i][t]=min(c[e]+\sum_{j=1}^{T}P[e][j]\times F[v[e]][t+j])$$

然后令$G[e][t]$表示$t$时刻从$u[e]$出发到达n点所需要的最小期望费用。

即$$G[e][t]=c[e]+\sum_{j=1}^{T}P[e][j]\times F[v[e]][t+j]$$

所以$$F[i][t]=min(G[e][t])\quad (u[e]=i)$$

这个复杂度为$O(mT^2)$

考虑优化,注意到求G的式子有点像卷积的形式。

的确,我们只需要把$P[e]$数组翻转,即可得到:

$$G[e][t]=G‘[e][T+t]=c[e]+\sum_{j=1}^{T}P[e][T-j]\times F[v[e]][t+j]$$

这个就可以用FFT做了。

但是我们并不知道P数组所有的值,又怎么办呢?

这时采用分治的方法,(类似CDQ那种)

基于这样一个事实:

$$D_r=\sum_{i=0}^{n-1}f_ig_{r-i}=\sum_{i=0}^{k}f_ig_{r-i}+\sum_{i=k+1}^{n-1}f_ig_{r-i}$$

用文字描述就是计算卷积时,可以把贡献分开计算,

或者说用FFT计算D的值时,可以先计算$\sum_{i=0}^{k}f_ig_{r-i}这个卷积,再加上\sum_{i=k+1}^{n-1}f_ig_{r-i}这个卷积$

●codeforces 553E Kyoya and Train

标签:最小   target   blog   ble   概率   起点   分层   mes   转移   

原文地址:https://www.cnblogs.com/zj75211/p/8341345.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!