博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Noip2016]换教室(期望+DP)
阅读量:7116 次
发布时间:2019-06-28

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

Description

Solution

这题结合了DP和概率与期望,其实只要稍微知道什么是期望就可以了,

状态的构造很关键,\(F[i][j][0/1]\)表示已经到第\(i\)个课程,之前用了\(j\)个申请机会,且当前课程是(1)否(0)申请

然后就容易想到转移方程,

\(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-p_{i-1})+dis(d_{i-1},c_i)*p_{i-1}\}\)

\[ F_{i,j,1}=min\{F_{i-1,j-1,0}+dis(c_{i-1},c_i)*(1-p_i)+dis(c_{i-1},d_i)*p_i, F_{i-1,j-1,1}+dis(c_{i-1},c_i)*(1-p_{i-1})*(1-p_i)+dis(d_{i-1},d_i)*p_{i-1}*p_i+ dis(c_{i-1},d_i)*(1-p_{i-1})*p_i+dis(d_{i-1},c_i)*p_{i-1}*(1-p_i) \} \]

方程看起来复杂但仔细分析会会发现其实很裸

Code

#include 
#include
#include
#define db double#define N 2010using namespace std; int n,m,V,E,c[N],d[N],g[320][320];db p[N],f[N][N][2],Ans;inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch = getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch = getchar();} return x*f;}inline void Init(){ n=read(),m=read(),V=read(),E=read(); for(int i=1;i<=n;++i) c[i]=read(); for(int i=1;i<=n;++i) d[i]=read(); for(int i=1;i<=n;++i) scanf("%lf",&p[i]); memset(g,127/2,sizeof(g)); for(int i=1;i<=E;++i){ int u=read(),v=read(),w=read(); g[u][v]=min(g[u][v],w); g[v][u]=g[u][v]; } for(int k=1;k<=V;++k) for(int i=1;i<=V;++i) for(int j=1;j<=V;++j) g[i][j]=min(g[i][j],g[i][k]+g[k][j]); for(int i=1;i<=V;++i) g[i][i]=0;}int main() { Init(); for(int i=1;i<=n;++i)for(int j=0;j<=m;++j)f[i][j][0]=f[i][j][1]=1e9; f[1][0][0]=f[1][1][1]=0; for(int i=2;i<=n;++i){ int lim=max(i,m); for(int j=0;j<=lim;++j){ f[i][j][0]=min(f[i-1][j][0]+g[c[i-1]][c[i]],f[i-1][j][1]+g[c[i-1]][c[i]]*(1.0-p[i-1])+g[d[i-1]][c[i]]*p[i-1]); if(j<1) continue; db tmp=f[i-1][j-1][1]+g[c[i-1]][c[i]]*(1.0-p[i-1])*(1.0-p[i])+g[d[i-1]][d[i]]*p[i-1]*p[i]; tmp+=g[c[i-1]][d[i]]*(1.0-p[i-1])*p[i]+g[d[i-1]][c[i]]*p[i-1]*(1.0-p[i]); f[i][j][1]=min(tmp,f[i-1][j-1][0]+g[c[i-1]][c[i]]*(1.0-p[i])+g[c[i-1]][d[i]]*p[i]); } } Ans=1e9; for(int i=0;i<=m;++i) Ans=min(Ans,min(f[n][i][0],f[n][i][1])); printf("%.2lf\n",Ans); return 0;}

转载于:https://www.cnblogs.com/void-f/p/7801106.html

你可能感兴趣的文章
借道大数据 互联网基金再探“蓝海”
查看>>
浙江医疗综合体获批 医疗资源也可共享
查看>>
3G/4G调制解调器曝漏洞:可致设备被完全控制
查看>>
“大数据”显然已经成为新一代“网红”
查看>>
你知道你的Mac摄像头正在偷窥你吗?这款工具或许能帮你
查看>>
如何在不增加投入的情况下让你的数据库快上200倍
查看>>
你造吗?开发人都知道这四个安全常识
查看>>
高危预警!移动设备面临的五大安全威胁
查看>>
超干货!一套完整的设计分析思路应该是怎样的?
查看>>
关于视频流的各种问题,后续整理
查看>>
从零开始,我的上云路
查看>>
【Spark Summit East 2017】R与Spark:如何使用RStudio的 Sparklyr和H2O的 Rsparkling分析数据...
查看>>
FIS源码-fis release概览
查看>>
鹰眼跟踪、EDAS燎原, 看高性能服务框架EDAS的架构实践
查看>>
使用LogHub进行日志实时采集
查看>>
使用jackson-mapper-lgpl序列化和反序列化
查看>>
Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像(克隆和导入)
查看>>
iOS开发之使程序在后台运行
查看>>
MySQL修改密码和加密
查看>>
ExtJs布局之border
查看>>