题目太长不表

<--无形传送,最为致命



学习一点数学期望的基础,预处理最短路,然后加上DP即可。(废话)

理解决策和结果的差别:

在这里每阶段的决策有两个:申请|不申请

结果有两个:换|不换

然而二者不是一一对应的关系;

而且决策意味着状态,结果只用于计算期望

为什么呢

因为答案要的就是对于某种决策组的期望

于是状态的设计应该是分为申请|不申请,

然后计算期望时讨论申请成不成功;

状态:f[i,j,0/1]讨论前i节课,申请j次,第三维=[第i节申请了]  

方程:

//f[i][j][0]=f[i-1][j][0]+dis(ci-1,ci)*ff[i-1][j][0]|f[i-1][j][1]+dis(ci-1,ci)*ff[i-1][j][1]+dis(di-1,ci)*ff[i-1][j][2]
//f[i][j][1]=f[i-1][j-1][0]+(dis(ci-1,di)*ki+dis[ci-1,ci]*(1-ki))*ff[i-1][j-1][0]|f[i-1][j-1][1]+(dis(ci-1,di)*ki+dis(ci-1,ci)*(1-ki))*ff[i-1][j-1][1]+(dis(di-1,di)*ki+dis(di-1,ci)*(1-ki))*ff[i-1][j-1][2]

|表示两者选一(当然是选小的)

ff表示与f(也就是期望)同步存在的概率

dis是最短路

剩下的如题

对了最短路记得判重边。

代码:

 #include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double f[][][];
double ff[][][];
int dis[][];
int c[],d[];
double ki[];
int n,m,v,e;
int main()
{
int i,j,k,l;
double min=;
memset(dis,0x3f3f3f,sizeof(dis));
scanf("%d%d%d%d",&n,&m,&v,&e);
for(i=;i<=n;i++)scanf("%d",&c[i]);
for(i=;i<=n;i++)scanf("%d",&d[i]);
for(i=;i<=n;i++)scanf("%lf",&ki[i]);
for(i=;i<=e;i++){
scanf("%d%d%d",&j,&k,&l);
if(l<dis[j][k])
dis[j][k]=dis[k][j]=l;
}
for(k=;k<=v;k++)
for(i=;i<=v;i++)
for(j=;j<=v;j++)
if(i!=j)
if (dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
for(i=;i<=v;i++)dis[i][i]=;
for(i=;i<=n;i++)
for(j=;j<=m;j++)
f[i][j][]=f[i][j][]=,ff[i][j][]=ff[i][j][]=ff[i][j][]=;
ff[][][]=-ki[];ff[][][]=ki[];ff[][][]=;
f[][][]=;f[][][]=;
for(i=;i<=n;i++)
for(j=;j<=m;j++){
if(f[i-][j][]+dis[c[i-]][c[i]]*ff[i-][j][]<f[i-][j][]+dis[c[i-]][c[i]]*ff[i-][j][]+dis[d[i-]][c[i]]*ff[i-][j][])
f[i][j][]=f[i-][j][]+dis[c[i-]][c[i]]*ff[i-][j][],ff[i][j][]=ff[i-][j][];
else
f[i][j][]=f[i-][j][]+dis[c[i-]][c[i]]*ff[i-][j][]+dis[d[i-]][c[i]]*ff[i-][j][],ff[i][j][]=ff[i-][j][]+ff[i-][j][];
if(j>){
if(f[i-][j-][]+(dis[c[i-]][d[i]]*ki[i]+dis[c[i-]][c[i]]*(-ki[i]))*ff[i-][j-][]<f[i-][j-][]+(dis[c[i-]][d[i]]*ki[i]+dis[c[i-]][c[i]]*(-ki[i]))*ff[i-][j-][]+(dis[d[i-]][d[i]]*ki[i]+dis[d[i-]][c[i]]*(-ki[i]))*ff[i-][j-][])
f[i][j][]=f[i-][j-][]+(dis[c[i-]][d[i]]*ki[i]+dis[c[i-]][c[i]]*(-ki[i]))*ff[i-][j-][],ff[i][j][]=ff[i-][j-][]*(-ki[i]),ff[i][j][]=ff[i-][j-][]*ki[i];
else
f[i][j][]=f[i-][j-][]+(dis[c[i-]][d[i]]*ki[i]+dis[c[i-]][c[i]]*(-ki[i]))*ff[i-][j-][]+(dis[d[i-]][d[i]]*ki[i]+dis[d[i-]][c[i]]*(-ki[i]))*ff[i-][j-][],ff[i][j][]=(ff[i-][j-][]+ff[i-][j-][])*(-ki[i]),ff[i][j][]=(ff[i-][j-][]+ff[i-][j-][])*ki[i];
}
}
for(i=;i<=m;i++){
if(min>f[n][i][])min=f[n][i][];
if(min>f[n][i][])min=f[n][i][];
}
printf("%.2lf",min);
return ;
}

现在想来,我还真是弱啊

BZOJ P4720[Noip2016]换教室____solution的更多相关文章

  1. BZOJ 4720 [Noip2016]换教室

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

  2. bzoj 4720: [Noip2016]换教室【期望dp】

    状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =) #include<iostream> #include<cstdio ...

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

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

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

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

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

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

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

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

  7. NOIP2016换教室 BZOJ 4720

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

  8. 【bzoj4720】[NOIP2016]换教室

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

  9. [NOIp2016] 换教室

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

随机推荐

  1. 从一个bug谈谈psqlodbc游标的一点认识

    本文源于最近修正的一个关于psqlodbc的bug,该bug在近期的psqlodbc的git上也有人提交了修正. 关于该bug的修正代码可以看这里: https://git.postgresql.or ...

  2. 解决Python向MySQL数据库插入中文数据时出现乱码

    解决Python向MySQL数据库插入中文数据时出现乱码 先在MySQL命令行中输入如下语句查看结果: 只要character_set_client character_set_database ch ...

  3. 初学Oracle

    初学Oracle,遇到了很多的问题,下载的是Oracle11g,没有找到合适的管理工具,所以用sql plus 创建表,以下是本人总结的一些sql plus的命令行的命令,希望对大家有用 与sql p ...

  4. Mysql update from

    UPDATE tab1   a INNER JOIN tab_game_version as b ON a.id=b.id SET a.advert_data=0 where a.advert_dat ...

  5. Java代码度量分析工具:Designite简介

    前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用.在这里,笔者向大家简单的介 ...

  6. 博客主题皮肤探索-添加新功能和fiddler的css/js替换

    还有前言 使用了主题之后,发现还差了一点功能.最新评论没有了,导致读者回复需要一点时间去找到底回复了哪条博客.于是就有了添加功能的想法. 如何调试CSS/JS 打开f12,可以看见加载的js资源都是混 ...

  7. 【性能测试】:解决loadrunner执行脚本启动慢的问题

    解决方法更改.net安装目录中一个配置文件machine.config. 该文件位于.net安装目录下v2.0.50727\CONFIG(如C:\Windows\Microsoft.NET\Frame ...

  8. (转)CentOS7安装KVM虚拟机详解

    原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E ...

  9. idea中web.xml报错 Servlet should have a mapping

    配置springmvc时,报错,实际mapping已经写了,错误截图如下: 搜索无果,后来发现是工程的web.xml位置配置错误,因为我之前换过根目录位置. 修改方法: 打开Project Struc ...

  10. WPF DataTemplate與ControlTemplate

    一. 前言     什麼是DataTemplate? 什麼是ControlTemplate? 在stackoverflow有句簡短的解釋 "A DataTemplate, therefore ...