NOIP第一次考期望,着实吓一跳。。。

读入之后,

由于 n<=200 n <= 200 n,给我们建立了天然的 floyd f l o y d floyd的机会,

建完图之后,能够顺利的想到dp

状态 dp[i][j][k] d p [ i ] [ j ] [ k ] dp[i][j][k]表示前 i i i节课,换了j" role="presentation" style="position: relative;">jjj次教室,第 i−1 i − 1 i-1节课有没有换教室 (k) ( k ) (k)的期望行走的距离

期望友情链接

很明显,

1、初始的时候, dp[1][0][0]=dp[1][1][1]=0,其余的为∞ d p [ 1 ] [ 0 ] [ 0 ] = d p [ 1 ] [ 1 ] [ 1 ] = 0 , 其 余 的 为 ∞ dp[1][0][0]=dp[1][1][1]=0,其余的为∞

2、转移的时候,考虑

首先 dp[i][0][0]=dp[i−1][0][0]+dis[c[i−1]−>c[i]] d p [ i ] [ 0 ] [ 0 ] = d p [ i − 1 ] [ 0 ] [ 0 ] + d i s [ c [ i − 1 ] − > c [ i ] ] dp[i][0][0]=dp[i-1][0][0]+dis[c[i-1]->c[i]]

之后对于所有的 j∈min(i,m), j ∈ m i n ( i , m ) , j∈min(i,m),

1) dp[i][j][0] d p [ i ] [ j ] [ 0 ] dp[i][j][0],因为 i−1 i − 1 i-1不选,所以上一节课的位置固定在 c[i−1] c [ i − 1 ] c[i-1],有以下可能方案:

被迫第i节课在 c[i] c [ i ] c[i]上,有 (1−k[i]) ( 1 − k [ i ] ) (1-k[i])的概率

②第 i i i节课在d[i]" role="presentation" style="position: relative;">d[i]d[i]d[i]上,有 k[i] k [ i ] k[i]的概率

前两种都是申请换课的情况

③不考虑换课 百分之一百在 c[i] c [ i ] c[i]上课。

于是乎就有

dp[i][j][0]=min(dp[i][j][0],/*原最优解*/
min(dp[i-1][j][0]+dis[c[i-1]][c[i]],/*不考虑换课*/
dp[i-1][j][1]+dis[c[i-1]][c[i]]*(1-k[i-1]) /*没换成功*/
+dis[d[i-1]][c[i]]*k[i-1])) /*换成功了*/;

2) dp[i][j][1] d p [ i ] [ j ] [ 1 ] dp[i][j][1]上一节课必换课,以下几种情况情况:

①不去换第 i−1 i − 1 i-1节课,

#1 i i i课换成功,k[i]" role="presentation" style="position: relative;">k[i]k[i]k[i]的可能

#2 i i i课没换成功 (1−k[i])" role="presentation" style="position: relative;">(1−k[i])(1−k[i])(1-k[i])的可能

②第 i−1 i − 1 i-1节课换成功了,有 k[i−1] k [ i − 1 ] k[i-1]的可能

#1 i i i课换成功,k[i]" role="presentation" style="position: relative;">k[i]k[i]k[i]的可能

#2 i i i课换失败,(1−k[i])" role="presentation" style="position: relative;">(1−k[i])(1−k[i])(1-k[i])的可能

③第 i−1 i − 1 i-1堂课换失败了,有 (1−k[i−1]) ( 1 − k [ i − 1 ] ) (1-k[i-1])得可能

#1 i i i课换成功,k[i]" role="presentation" style="position: relative;">k[i]k[i]k[i]的可能

#2 i i i课换失败,(1−k[i])" role="presentation" style="position: relative;">(1−k[i])(1−k[i])(1-k[i])的可能 (同上)

于是乎

dp[i][j][1]=min(dp[i][j][1], /*原先最优解*/
min(dp[i-1][j-1][0]/*i-1不换*/
+dis[c[i-1]][c[i]]*(1-k[i])/*i课换失败*/
+dis[c[i-1]][d[i]]*k[i],/*i课换成功*/
dp[i-1][j-1][1]/*i-1课换成功*/
+dis[d[i-1]][d[i]]*k[i]*k[i-1]/*i-1,i课成功*/
+dis[d[i-1]][c[i]]*(1-k[i])*k[i-1]/*i失败,i-1成功*/
+dis[c[i-1]][d[i]]*k[i]*(1-k[i-1])/*i成功,i-1失败*/
+dis[c[i-1]][c[i]]*(1-k[i])*(1-k[i-1])/*i-1,i都失败*/)) ;

这样就搞定了

3.答案: minmi=0min(dp[n][i][0],dp[n][i][1]) min i = 0 m m i n ( d p [ n ] [ i ] [ 0 ] , d p [ n ] [ i ] [ 1 ] ) \min_{i=0}^mmin(dp[n][i][0],dp[n][i][1])

#include <bits/stdc++.h>
using namespace std ;
const double inf = 1e17;
const int N = 2010 ;
double dp[N][N][2] ;//dp[i][j][k]表示前i节课,换了j节课,第i-1有没有换
int c[N],d[N],dis[310][310] ;
double k[N] ;
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]) ;memset(dis,0x3f,sizeof(dis)) ; for (int i=1;i<=e;i++){int a,b,c ;scanf("%d%d%d",&a,&b,&c) ;dis[b][a]=dis[a][b]=min(dis[a][b],c) ;}for (int K=1;K<=v;K++) //一波Floyd for (int i=1;i<=v;i++)for (int j=1;j<=v;j++)dis[i][j]=min(dis[i][j],dis[i][K]+dis[K][j]) ;for (int i=1;i<=v;i++) dis[i][i]=dis[i][0]=dis[0][i]=0 ;for (int i=0;i<=n;i++)for (int j=0;j<=m;j++)dp[i][j][1]=dp[i][j][0]=inf ;dp[1][0][0]=dp[1][1][1]=0 ;for (int i=2;i<=n;i++){dp[i][0][0]=dp[i-1][0][0]+dis[c[i-1]][c[i]] ; for (int j=1;j<=min(i,m);j++){dp[i][j][0]=min(dp[i][j][0],min(dp[i-1][j][0]+dis[c[i-1]][c[i]],dp[i-1][j][1]+dis[c[i-1]][c[i]]*(1-k[i-1])+dis[d[i-1]][c[i]]*k[i-1])) ;dp[i][j][1]=min(dp[i][j][1],min(dp[i-1][j-1][0]+dis[c[i-1]][c[i]]*(1-k[i])+dis[c[i-1]][d[i]]*k[i],dp[i-1][j-1][1]+dis[d[i-1]][d[i]]*k[i]*k[i-1]+dis[d[i-1]][c[i]]*k[i-1]*(1-k[i])+dis[c[i-1]][d[i]]*(1-k[i-1])*k[i]+dis[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i]))) ;}}double ans=inf ;for (int i=0;i<=m;i++) ans=min(ans,min(dp[n][i][0],dp[n][i][1])) ;printf("%.2lf",ans) ;
} 

【NOIp2016 day1t3】换教室相关推荐

  1. NOIP2016提高组Day1T3 换教室

    分析 这是一道期望题, 设fi,j,0/1f_{i,j,0/1} 表示第i间教室,第j次申请,0是前一次没有提交申请,1是前一次提交了申请的最小期望. 转移比较简单,但是有一定麻烦. 因为v很小, 所 ...

  2. 【BZOJ4720】【NOIP2016】换教室

    我当年真是naive-- 原题: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节 ...

  3. 【NOIP2016】换教室

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

  4. BZOJ 4720 [Noip2016]换教室

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

  5. P1850 [NOIP2016 提高组] 换教室

    P1850 [NOIP2016 提高组] 换教室 题意: 有2n个课安排在n个时间段上,每个时间段上都有两个一样的课同时在不同地方上,起初牛牛被所有课都被安排在Ci上课,另一节课在Di上课.牛牛现在想 ...

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

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

  7. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  8. 通过查询教室课表,选择最佳的空教室自习(少换教室) Python 附源码

    运行效果: 1.思路 通过查询空教室安排出每一天的最佳自行地点 1.读取2个excel文件(实践课教室课表+理论课教室课表) 2.生成一个三维矩阵 3.第一维:星期几(从低到高层直接就对应星期几,一共 ...

  9. 换教室(NOIP2016提高组Day1T3)

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

最新文章

  1. ArcGIS API for Silverlight 入门学习笔记(三):基础地图实例
  2. oracle.jobs中failures,Oracle job详解
  3. Entity Framework技巧系列之十一 - Tip 42 - 45
  4. Nginx中worker connections问题的解决方法
  5. 关于Class.forName()
  6. CSS设置动态超链接
  7. html5仪表板可调节,使用HTML5画布实现的超棒javascript动画仪表板:gauge.js
  8. 强java_Java (强/弱/软/虚)引用
  9. Spring之装配Bean(一)
  10. “约见”面试官系列之常见面试题之第八十七篇之ajax发送多个请求优化(建议收藏)
  11. LINUX使用消息队列的代码
  12. 第 3 章 sqlmap - automatic SQL injection and database takeover tool
  13. Python2.7打包的exe文件反编译成py文件
  14. office2019 图目录_【设计图文】电磁阀体中心孔组合机床、机床总体工位布置和钻、扩、铰工位液压系统设计(有cad图)...
  15. 数组和集合之间的转化
  16. [Android 4.4.3] 泛泰A860 Omni4.4.3 20140610 RC2.0 三版通刷 by syhost
  17. 最新批量搜狗域名添加绑定工具
  18. 【VS Code】Windows10下VS Code配置Ruby语言环境
  19. java基础知识面试题(41-95)
  20. IP和局域网 简单了解

热门文章

  1. Python最强装逼神技!微信远程控制电脑,想让你电脑关机就关机!
  2. 快速计算距离Annoy算法原理及Python使用
  3. Delphi 用ADOQuery连接查询数据库并查询数据并返回结果
  4. 怎么调整html文本域宽度和高度,如何使用CSS设置textarea的宽度和高度?
  5. 许式伟:Go+ 演进之路
  6. 2021电赛预测押题:基于互联网的多人音频会议系统
  7. IDEA中同项目引用报红问题
  8. TypeError: Failed to fetch dynamically imported module:
  9. 博弈论(Game Theory)入门——基础知识
  10. 科技与法律的一些思考