NOIP2016D1T3 换教室

题目大意:有n个时间段,每个时间段i有两个教室a[i],b[i]可以上课,如果不申请换教室就在教室a[i]上课,如果换教室就在b[i]上课。你最多只能换m次教室。教室之间有一些双向路,保证教室两两可以到达。问上完n节课走路长度的数学期望。

题解:这是一道典型的概率dp题。重要的是状态的设计。

我们令dp[i][j][0/1]代表:第i个时间段换了j次课室这次换(0)还是不换(1)的数学期望。需要注意的是因为要满足dp的无后效性,必须要加上dp状态的第三维代表这一次还还是不换。

根据上次换还是不换和这次换还是不换, 那么就有4种结果。

dp[i][j][0]=min(dp[i-1][j][0]+上次和这次都不换的期望代价,dp[i-1][j][1]+上次换这次不换的期望代价);

dp[i][j][1]=min(dp[i-1][j-1][0]+上次不换这次换的期望代价,dp[i-1][j-1][1]+上次和这次都换的期望代价);

dp边界为dp[1][0][0]=dp[1][0][1]=0;   答案为在i==n中取最小值。

这道题还是有一些细节(期望代价的计算)得看代码的。

AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=+;
const int V=+;
const int INF=0x3f3f3f3f;
int n,m,v,e;
int a[N],b[N],map[V][V];
double k[N],dp[N][N][]; void floyd() {
for (int k=;k<=v;k++)
for (int i=;i<=v;i++)
for (int j=;j<=v;j++)
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
} int main()
{
scanf("%d%d%d%d",&n,&m,&v,&e);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=n;i++) scanf("%d",&b[i]);
for (int i=;i<=n;i++) scanf("%lf",&k[i]);
memset(map,0x3f,sizeof(map));
for (int i=;i<=v;i++) map[i][i]=;
for (int i=;i<=e;i++) {
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if (map[x][y]>z) map[x][y]=z;
if (map[y][x]>z) map[y][x]=z;
} floyd(); for (int i=;i<=n;i++) for (int j=;j<=m;j++) dp[i][j][]=dp[i][j][]=INF;
dp[][][]=;
dp[][][]=;
double ans=INF;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++) {
double w1=map[a[i-]][a[i]],w2=map[a[i-]][b[i]];
double w3=map[b[i-]][a[i]],w4=map[b[i-]][b[i]];
dp[i][j][]=min(dp[i-][j][]+w1,dp[i-][j][]+w1*(-k[i-])+w3*k[i-]);
double temp=w1*(-k[i-])*(-k[i])+w2*(-k[i-])*(k[i])+w3*(k[i-])*(-k[i])+w4*(k[i-])*(k[i]);
if (j) dp[i][j][]=min(dp[i-][j-][]+w1*(-k[i])+w2*(k[i]),dp[i-][j-][]+temp); if (i==n) ans=min(ans,min(dp[i][j][],dp[i][j][]));
}
printf("%.2lf",ans);
return ;
}

NOIP2016D1T3 换教室 (概率DP)的更多相关文章

  1. P1850 换教室 概率dp

    其实说是概率dp,本质上和dp没什么区别,就是把所有可能转移的情况全枚举一下就行了,不过dp方程确实有点长... ps:这个题的floyed我竟然之前写跪了... 题目: 题目描述 对于刚上大学的牛牛 ...

  2. luogu 1850 换教室 概率+dp

    非常好的dp,继续加油练习dp啊 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) ...

  3. 换教室(期望+DP)

    换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...

  4. 【bzoj4720】[NOIP2016]换教室 期望dp

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

  5. 【BZOJ4720】【NOIP2016】换教室 [期望DP]

    换教室 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description Input 第一行四个整数n,m,v ...

  6. Bzoj 4720 换教室 (期望DP)

    刚发现Bzoj有Noip的题目,只会换教室这道题..... Bzoj 题面:Bzoj 4720 Luogu题目:P1850 换教室 大概是期望DPNoip极其友好的一道题目,DP不怎么会的我想到了,大 ...

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

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

  8. Luogu P1850 换教室(期望dp)

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

  9. P1850 换教室 期望dp

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

随机推荐

  1. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  2. SAP固定资产(FI-AA),一网打尽(转)

    在固定资产模块的边缘,游荡了四五年的时间了,细细数来,固定资产这个熟悉又抽象的东西(熟悉是由于天天接触常常听说,抽象是具体到系统实现上有些复杂并且常遇到问题),好像也没有多少东西. 1) SAP固定资 ...

  3. python输出转义字符

    转义字符在字符串中不代表自己,比如\n代表回车,不代表\n字符,那我想输入转义字符本身呢? 答:在字符串前面加个r 如print(“aa\nbb”) 会输出aa bb 如print(r"aa ...

  4. GO富集分析 信号通路

    基因富集分析是分析基因表达信息的一种方法,富集是指将基因按照先验知识,也就是基因组注释信息进行分类. 信号通路是指能将细胞外的分子信号经细胞膜传入细胞内发挥效应的一系列酶促反应通路.这些细胞外的分子信 ...

  5. c++ 预处理指令#define, #endif...

    常见的预处理指令有: # 空指令,无任何效果 # include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果 ...

  6. (转)阿里官方提供的dubbo-spring-boot-starter 1.0.1 整合的dubbo 2.6.0和spring boot 1.5.9 案例

    作者:许浩_5e9f链接:https://www.jianshu.com/p/5381cc8876e3來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. springboo ...

  7. SoftDevice Specification v1.2

    S110 SoftDevice是蓝牙®低功耗(BLE)外设协议栈的解决方案.它集成了一个低 能量控制器和主机,并为建设蓝牙低功耗系统全面且灵活的API 芯片(SoC)解决方案. 本文件包含SoftDe ...

  8. SharePoint 2013中PerformancePoint仪表板设计器连接Analysis Services 2012的问题

    在SharePoint 2013的PerformancePoint仪表板设计器在创建链接到AnalysisServices 2012的数据链接的时候,数据库列表无法获取服务器上的数据库.这个问题挺让人 ...

  9. Html5 学习笔记 【PC固定布局】 实战5 咨询页面 侧栏

    最终效果图: 提出公共页脚和导航部分: 新建infomatino.html (旅游咨询)页面 <!DOCTYPE html> <html lang="zh-cn" ...

  10. LeetCode:旋转数组

    最近看了一道题,自己做个过后又参考了网上的解法,为了加深对这个解法的理解和记忆于是有了这篇博客,供自己以后复习用 题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 ...