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

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

概率期望\(dp\).

首先随便用个啥处理出任意两点之间的最短路。

\(f[i][j][0/1]\)表示前\(i\)个时间段申请换了\(j\)次教室的期望最小值,\(0/1\)记录第\(i\)次有没有换教室。

然后枚举前两维,分情况讨论下这次和上次有没有申请换教室,申请的有没有成功。

转移方程就很显然了。

\[ f[i][j][0]=min(f[i-1][j][0]+dis[c[i-1]][c[i]],f[i-1][j][1]+dis[c[i-1]][c[i]]*(1.0-p[i-1])+dis[d[i-1]][c[i]]*p[i-1]); \]
申请了换教室的情况也类似,方程太长就不写了。

#pragma GCC optimize(3)#include
using namespace std;#define read(x) scanf("%d",&x)#define write(x) printf("%d\n",x)#define maxn 2005int n,m,v,e,c[maxn],d[maxn],mp[305][305];double f[maxn][maxn][2],p[maxn];int main(){ //freopen("testdata.in","r",stdin); //freopen("out.out","w",stdout); read(n),read(m),read(v),read(e);int x,y,z; for(int i=1;i<=v;i++) for(int j=1;j<=v;j++) mp[i][j]=1e9; for(int i=1;i<=n;i++) read(c[i]); for(int i=1;i<=n;i++) read(d[i]); for(int i=1;i<=n;i++) scanf("%lf",&p[i]); for(int i=1;i<=e;i++) read(x),read(y),read(z),mp[x][y]=mp[y][x]=min(mp[x][y],z); for(int k=1;k<=v;k++) for(int i=1;i<=v;i++) for(int j=1;j

转载于:https://www.cnblogs.com/hbyer/p/9637435.html

你可能感兴趣的文章
Sequelize+MySQL存储emoji表情
查看>>
RabbitMQ学习之Publish/Subscribe(3)
查看>>
[SCOI2010]生成字符串
查看>>
JLOI2015 城池攻占
查看>>
在 Azure 虚拟机上快速搭建 MongoDB 集群
查看>>
跑步运动软件调研
查看>>
搭建ntp时间服务器 ntp - (Network Time Protocol)
查看>>
35. Search Insert Position
查看>>
awk使用
查看>>
ASP.NET Razor 视图引擎编程参考
查看>>
Vue 基础篇
查看>>
malloc_free_new_delete
查看>>
Python中的open和codecs.open
查看>>
开发Servlet的方法(2)
查看>>
asp.net mvc 伪静态添加
查看>>
EA类图与代码同步
查看>>
Android Studio 智能感知无效
查看>>
javascript 日常
查看>>
让插件帮你优化代码
查看>>
ng 动态的生成option。
查看>>