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]\)上课,如果申请换课成功, ...
随机推荐
- react onclick传递参数
最近在做react项目的时候,被一个小问题绊了一脚,记录一下 onClick 传入参数 onClick={e=>{this.Mallclose(e,index)} onClick={this.M ...
- 考试题 T3
题意分析 首先\(\%\%\%\%olinr\)以及花_Q\(julao\)当场切题 然后就是怎么求 \[max(|a-A|,|b-B|)=max(a-A,A-a,B-b,b-B)\] 我们令\(x_ ...
- Python文件读取和数据处理
一.python文件读取 1.基本操作 读取文件信息时要注意文件编码,文件编码有UFT-8.ASCII或UTF-16等. 不过在python中最为常用的是UTF-8,所以如果不特别说明就默认UTF-8 ...
- FJWC2019 最短路
题目描述 有一张无向图,开始的时候所有边权为1,所有点没有权值,现在给定一个整数k,表示可以将k个点的点权设置为1,求点0到n-1的最短路最长是多少 Solution 网络流好题[然而本蒟蒻还是不会] ...
- 皕杰报表 javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
今天做报表的时候,跳转到显示报表页面的时候不出来数据,报错说数据集未产生. 后台报错 javax.naming.NameNotFoundException: Name jdbc is not boun ...
- javascript中Function与Object
1. 先来一段代码: console.log(Function); // function Function() { [native code] } console.log(Object); // f ...
- sysv-rc-conf介绍
sysv-rc-conf简介 sysv-rc-conf是一个强大的服务管理程序,Ubuntu运行级别Linux 系统任何时候都运行在一个指定的运行级上,不同的运行级的程序和服务都不同,所要完成的工作和 ...
- 《LeetBook》leetcode题解(10): Regular Expression Matching——DP解决正则匹配
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- Java多线程(二)同步与等待唤醒
1:数据安全问题 1.1:什么情况下会出现数据安全问题? 多个线程对同一个资源进行操作,并且操作资源的语句有多条.那么这个时候这些语句因为cpu的随机性,有可能被多个线程分开执行.导致数据安全问题. ...
- javascript中的function 函数名(){} 和 函数名:function(){}有什么不同
function functionName(){};这是定义一个函数 functionName:function(){};是设置一个对象的方法. 下面举一个例子: <html> <h ...