博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1850 换教室
阅读量:5217 次
发布时间:2019-06-14

本文共 1987 字,大约阅读时间需要 6 分钟。

期望DP

因为

课程是按时间顺序的,后面的变化不会影响前面的结果

对于每个时间段的课,只有两种选择(换 or 不换)

那么

显然DP,而且 好像 转移也很好写...

显然设 dp [ i ] [ j ] 表示到了第 i 个时间段,已经提交了 j 节课的申请时的最短期望路程

写到一半发现

好像转不了...

因为不知道当前是在哪个教室,自然不知道期望路程是多少...

好像凉了..

没事,多开一维 k ,k=0表示第 i 个时间段不提交申请,k=1 表示提交申请

这样就知道在 c[ i ] 和 d[ i ] 教室上课的概率(注意是概率,因为有可能申请失败),然后就可以知道期望路程了

设 f[ i ] 为申请第 i 节课通过的概率,dis[ i ][ j ] 为从教室 i 到教室 j 的最短路程

所以 dp [ i ] [ j ] [ 0 ] = min(dp[ i-1][ j ][ 0 ]+dis[ c[ i-1 ] ][ c[ i ] ]*1.0*1.0,

             dp[ i-1][ j ][ 1 ] + (dis[ d[ i-1] ][ c[ i ] ]*f [ i-1]*1.0) +

            (dis[ c[ i-1] ][ c[ i ] ]*(1-f[ i-1])*1.0

dis乘上的第一个数表示上一次的概率,第二个数表示这一次的概率

因为我们还不知道上一次是否申请成功,所以如果有申请就要考虑成功和失败的情况

所以期望路程就是 路程*走这条路的概率

如果没申请就肯定失败,所以期望路程就是 申请失败的路程*100%

对于 dp[ i ] [ j ] [1] 也是用类似的方法转移,但是要注意这一次也有失败的可能

所以转移会比较麻烦一些:

dp[ i ] [ j ] [ 1 ] = min(dp[ i-1][ j-1][ 0 ] + dis[ c[ i-1] ][ d[ i ] ]*1.0*f[ i ] + dis[ c[i-1] ][ c[ i ] ]*1.0*(1.0-f[ i ])

dp[ i-1][ j-1][1] + dis[ d[ i-1 ] ][ d[ i ] ]*f[ i-1]*f[ i ] +

        dis[ d[ i-1] ][ c[ i ] ]*f[ i-1]*(1.0-f[ i ]) +

        dis[ c[ i-1] ][ d[ i ] ]*(1.0-f[ i-1 ])*f[ i ] +

        dis[ c[ i-1] ][ c[ i ] ]*(1.0-f[ i-1])*(1.0-f[ i ]) )

转移好像没这么简单....

好了有了转移就一点难度都没有了

预处理两点间的最短路径就用 floyd 就好了

(写这题的时候改了半天,结果是 floyd 错了...)

#include
#include
#include
#include
#include
#include
using namespace std;const int N=2007;int n,m,t,e;int c[30007],d[20007];double dp[N][N][2],f[10007],dis[N][N];int main(){ cin>>n>>m>>t>>e; for(int i=1;i<=t;i++) for(int j=1;j
0) dp[i][j][1]=min( dp[i-1][j-1][0]+dis[c[i-1]][d[i]]*1.0*f[i] + dis[c[i-1]][c[i]]*1.0*(1.0-f[i]) , dp[i-1][j-1][1]+dis[d[i-1]][d[i]]*f[i-1]*f[i] + dis[d[i-1]][c[i]]*f[i-1]*(1.0-f[i]) + dis[c[i-1]][d[i]]*(1.0-f[i-1])*f[i] + dis[c[i-1]][c[i]]*(1.0-f[i-1])*(1.0-f[i]) ); } double ans=99999999.0; for(int i=0;i<=m;i++) ans=min(ans, min(dp[n][i][0],dp[n][i][1]) ); printf("%.2lf",ans); return 0;}

 

转载于:https://www.cnblogs.com/LLTYYC/p/9591746.html

你可能感兴趣的文章
细说WebSocket - Node篇
查看>>
jenkins+testNG
查看>>
[洛谷1485] 火枪打怪
查看>>
PAT B1018.锤子剪刀布(20)
查看>>
Extjs控件之 grid打印功能
查看>>
枚举类型(不常用)递归
查看>>
ETL
查看>>
Tomcat源码分析(六)--日志记录器和国际化
查看>>
YII缓存依赖的应用
查看>>
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>