BZOJ P4720[Noip2016]换教室____solution
题目太长不表
<--无形传送,最为致命
学习一点数学期望的基础,预处理最短路,然后加上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的更多相关文章
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
- bzoj 4720: [Noip2016]换教室【期望dp】
状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =) #include<iostream> #include<cstdio ...
- 【BZOJ】4720: [Noip2016]换教室
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1690 Solved: 979[Submit][Status ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- [NOIP2016]换教室 题解(奇怪的三种状态)
2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...
- NOIP2016换教室 BZOJ 4720
BZOJ 4720 换教室 题目描述: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上 ...
- 【bzoj4720】[NOIP2016]换教室
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- [NOIp2016] 换教室
题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...
随机推荐
- 我编写 33 个 VSCode 扩展的原因以及管理扩展的经验
简评:使用工具的同时自己创造一些工具或扩展,是一件很棒的事情. 以下"我"指原作者 Fabio 大家好,我叫 Fabio,是一位自学成才的开发人员,热衷于开源和授权.我也喜欢自己制 ...
- day05 --class --home
# -*- coding: utf-8 -*-# @Time : 2018/12/25 14:24# @Author : Endless-cloud# @Site : # @File : day05 ...
- day00 -----博客作业1
问题1.使用while循环输入 1 2 3 4 5 6 8 9 10 i = 0 while i<10: i+=1 if i ==7: continue print(i) 问题2 求1- ...
- 转一下大师兄的"MySQL高可用架构之MHA"
简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...
- 半年的iOS代码生活
半年的iOS代码生活 在高考大军中拼杀过,也在大学校园中荒芜过,曾经低迷消沉,也常满怀壮志…… 但是最多的还是被称为小伙子以及自称为iOS工程师!博主就是这种喜闻乐见的这类人,实习一年后在2015年的 ...
- docker入门之基础操作
docker,我们可以把docker当作是简单的虚拟机.但这个虚拟机不像vm一样安装系统.所以我们又称之为容器.你可以理解成,容器就是虚拟机 docker与vm的对比 vmware:下载镜像——安装系 ...
- [转] Elasticsearch 6.1官方入门教程
一篇比较简要又全面的elasticsearch教程. https://blog.csdn.net/hololens/article/details/78932628
- 20190417 CentOS 7下安装ActiveMQ
前言 用VMware安装CentOS 7.6,创建一个新的用户lihailin9073,并使用这个用户登陆CentOS系统 安装和启动 登陆ActivieMQ官网http://activemq.apa ...
- MySQL设置远程连接服务器
默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0 ...
- 装B 自卫神器 -
IE内核下,使用XX插件 修改网页源代码直接无缝显示数据. 包括https FF同样. 截图: 可以修改所有客户端数据,用以迷惑他们.纯属娱乐 ``````` 再次,顺便提醒下. 做网赚的很多朋友,切 ...