【NOIP2016】换教室(动态规划)
题解
其实感觉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】换教室(动态规划)的更多相关文章
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
- 【BZOJ】4720: [Noip2016]换教室
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1690 Solved: 979[Submit][Status ...
- 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< ...
- 【bzoj4720】[NOIP2016]换教室
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- [NOIp2016] 换教室
题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...
- [NOIP2016]换教室(概率期望$DP$)
其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- NOIP2016换教室 BZOJ 4720
BZOJ 4720 换教室 题目描述: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上 ...
随机推荐
- ajax常用操作
load的方法的使用(现在已不常用) <!doctype html><html lang="en"><head> <meta charse ...
- shell脚本实现anisble客户端脚本分发和密钥授权配置
##############################Deploy ansible client shell######################## echo "start d ...
- dedecms调用文章内容
使用织梦建站时,有时候需要调用某一文档的内容,但织梦默认没有相应的标签,这时就需要我们使用sql语句去抓取了. {dede:sql sql="SELECT aid,typeid,body F ...
- hdu4143 A Simple Problem
A Simple Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- Ubuntu上搭建SVN
参考文档:http://www.linuxidc.com/Linux/2016-08/133961.htm http://www.linuxidc.com/Linux/2015-01/111956.h ...
- Java文件及文件夹的创建与删除
功能 这个实例实现了在D盘创建一个文件和文件夹,并删除它们. 函数介绍 createNewFile():当文件不存在时,根据绝对路径创建该文件. delete():删除文件或者文件夹. ...
- c# 委托(Func、Action)
以前自己写委托都用 delegate, 最近看组里的大佬们都用 Func , 以及 Action 来实现, 代码简洁了不少, 但是看得我晕晕乎乎. 花点时间研究一下,记录一下,以便后期的查阅. 1.F ...
- Link/cut Tree
Link/cut Tree 一棵link/cut tree是一种用以表示一个森林,一个有根树集合的数据结构.它提供以下操作: 向森林中加入一棵只有一个点的树. 将一个点及其子树从其所在的树上断开. 将 ...
- PyQt5多点触控写字板实现及困惑
Qt支持程序多点触控,就想使用PyQt5做一个触控画板,经过几番周折,查阅了TouchEvent官方文档,又参考了一篇QT for Android的例子,采用eventfilter过滤器来识别触屏事件 ...
- 移动端开发利器vConsole.js,app内嵌H5开发时调试用
vConsole:一个轻量.可拓展.针对手机网页的前端开发者调试面板,主要还是用于内嵌app页面时在手机上进行调试,打印完全和在PC端一样,方便大家找出问题所在. 不说废话直接进入主题,vConsol ...