题目戳我

题解

其实感觉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 1000000000
int 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;
}

【NOIP2016】换教室(动态规划)的更多相关文章

  1. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  2. BZOJ 4720 [Noip2016]换教室

    4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...

  3. 【BZOJ】4720: [Noip2016]换教室

    4720: [Noip2016]换教室 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1690  Solved: 979[Submit][Status ...

  4. bzoj4720: [Noip2016]换教室(期望dp)

    4720: [Noip2016]换教室 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1294  Solved: 698[Submit][Status ...

  5. [NOIP2016]换教室 题解(奇怪的三种状态)

    2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...

  6. 【bzoj4720】[NOIP2016]换教室

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...

  7. [NOIp2016] 换教室

    题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...

  8. [NOIP2016]换教室(概率期望$DP$)

    其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...

  9. 【bzoj4720】[NOIP2016]换教室 期望dp

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...

  10. NOIP2016换教室 BZOJ 4720

    BZOJ 4720 换教室 题目描述: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上 ...

随机推荐

  1. PHP输出打印方法

    PHP这门语言灵活而充满众多的API和用法,然而在这个技术领域里却缺乏一些系统的总结归纳.或许这与PHP语言的诞生方式有关,衍生,快速变化,原始限制等等,诸多因素决定这门语言变得smarty,却没有人 ...

  2. jumpserver在centos 7上的部署

    cd /opt/git clone https://github.com/jumpserver/jumpserver.gitcd jumpservergit checkout master 准备安装: ...

  3. 数据库中字段类型对应的C#中的数据类型(转载)

    数据库中字段类型对应C#中的数据类型: 数据库                 C#程序 int int32 text string bigint int64 binary System.Byte[] ...

  4. Tomcat8+Spring-Security 启用安全通道(https)的一步步实现

    近日学习Spring Security框架,学习到利用安全框架完成系统的安全通道控制时,来来回回遇到了不少问题.spring教程上写的略简单,对于我等小白来讲不足以支撑看书编码,好在网络上有资料可以查 ...

  5. 使用Netbeans内置的Git工具

    在 NetBeans IDE 中使用 Git 支持 NetBeans IDE 为 Git 版本控制客户端提供支持.通过利用 IDE 的 Git 支持,您可以从 IDE 内的项目中直接执行版本控制任务. ...

  6. FFMpeg for PHP

    PHP使用FFMpeg来转换视频格式.Github上搜索FFMPEG,到https://github.com/PHP-FFMpeg/PHP-FFMpeg. For Windows users : Pl ...

  7. linux shell 和linux 命令的区别?windows shell 和 windows 命令呢?

    shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面. shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起 ...

  8. Apache服务器安装-apache已经卸载,如何删除注册在系统的服务

    cmd进入windows的命令行客户端,执行:sc delete apache 注意:以管理员的身份删除,同理,此方法也可以删除其他类似的服务.例如sc delete MongoDB.

  9. Nginx和Apache有什么区别?

    Nginx抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能. Apache  rewrite ,比nginx 的rewrite ...

  10. nyoj1246 逃离妖洞 BFS

        逃离妖洞 描述 唐僧不小心又掉入妖怪的迷宫了.这个迷宫有n行m列,共n*m个方格.有的方格是空的,唐僧可以站在上面,有些是有障碍物的不能站.每次唐僧可以移动到相邻的8个空方格上.但是有些情况不 ...