【NOIP2016】换教室
来源:互联网 发布:淘宝夜店装 编辑:程序博客网 时间:2024/05/21 08:37
题目戳我
题解
其实感觉16年的难度不是很大????
这道题去年考场上DP都想出来了。。。
只是因为不会数学期望。。。然后GG。。。。
这道题目只要把数学期望搞出来就可以啦
设f[i][j][0/1]表示前i门课程中,已经换了j门,上一个课程是否换了教室
然后转一下期望就可以啦。。。。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#include<vector>using namespace std;#define MAX 2010#define INF 1000000000int c[MAX],d[MAX];double K[MAX];int g[350][350];double f[MAX][MAX][2];double s[MAX][MAX][2];int n,m,v,E;int main(){ scanf("%d%d%d%d",&n,&m,&v,&E); for(int i=1;i<=n;++i)scanf("%d",&c[i]); for(int i=1;i<=n;++i)scanf("%d",&d[i]); for(int i=1;i<=n;++i)scanf("%lf",&K[i]); for(int i=1;i<=v;++i) for(int j=1;j<=v;++j) if(i!=j)g[i][j]=INF; for(int i=1;i<=E;++i) { int u,v,w; scanf("%d%d%d",&u,&v,&w); g[u][v]=g[v][u]=min(g[u][v],w); } 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]); //f[i][j][0/1]表示前i个课程中,申请j个,当前是否申请的期望 for(int i=1;i<=n;++i) for(int j=0;j<=m;++j) f[i][j][0]=f[i][j][1]=INF; f[1][0][0]=f[1][1][1]=0.0; for(int i=2;i<=n;++i) { f[i][0][0]=f[i-1][0][0]+g[c[i-1]][c[i]]*1.0; for(int j=1;j<=m;++j) { f[i][j][0]=f[i-1][j][0]+1.0*g[c[i-1]][c[i]]; f[i][j][0]=min(f[i][j][0],f[i-1][j][1]+1.0*K[i-1]*g[d[i-1]][c[i]]+1.0*(1.0-K[i-1])*g[c[i-1]][c[i]]); double t2; f[i][j][1]=f[i-1][j-1][0]+1.0*K[i]*g[c[i-1]][d[i]]+1.0*(1.0-K[i])*g[c[i-1]][c[i]]; t2=f[i-1][j-1][1]; t2+=K[i]*(1.0*K[i-1]*g[d[i-1]][d[i]]+1.0*(1.0-K[i-1])*g[c[i-1]][d[i]]); t2+=(1.0-K[i])*(1.0*K[i-1]*g[d[i-1]][c[i]]+1.0*(1.0-K[i-1])*g[c[i-1]][c[i]]); f[i][j][1]=min(f[i][j][1],t2); } } double ans=f[n][0][0]; for(int i=1;i<=m;++i)ans=min(f[n][i][0],ans),ans=min(f[n][i][1],ans); printf("%.2lf\n",ans); return 0; }
阅读全文
1 0
- BZOJ4720 [Noip2016]换教室
- [NOIP2016]换教室
- [NOIP2016] 换教室
- 【noip2016】换教室 题解
- NOIP2016 换教室
- bzoj4720 [Noip2016]换教室
- NOIP2016换教室
- NOIP2016 T3 换教室
- 【NOIP2016-D1T3】换教室
- NOIP2016 换教室
- bzoj4720: [Noip2016]换教室
- bzoj4720 [Noip2016]换教室
- noip2016换教室
- 【NOIP2016】换教室
- [noip2016]换教室 题解
- [NOIP2016] 换教室
- NOIP2016换教室
- 【noip2016】换教室
- 中国最好大学网爬取大学排名信息
- Oracle 删除表中记录 如何释放表及表空间大小
- Android LruCache : how to put and get user's data
- 学习Docker(2017-10-2)
- 《加密与解密》第三篇非明码比较分析,个人实战
- 【NOIP2016】换教室
- LinuxStudyNote(43)-图解Linux系统分区
- 刺杀
- some tips about python
- HDU 5521 Meeting
- 【Luogu3919】可持久化数组
- 组合数
- Swift开发指南:使用Swift与Cocoa和Objective-C(Swift 4)
- Bootstrap学习笔记——排版