刚发现Bzoj有Noip的题目,只会换教室这道题.....

Bzoj 题面:Bzoj 4720

Luogu题目:P1850 换教室

大概是期望DPNoip极其友好的一道题目,DP不怎么会的我想到了,大概是自己比较有成就感的题目(我才不会告诉你们,我这个题因为const int 挂了)

期望的线性性质:和的期望 = 期望的和.

期望\(E(x) = \sum_iP_i*W_i\)

那么这个题的期望就是\(L * P_i\)长度乘以概率.

知道期望的性质及期望,下面就是动态规划的部分.

设置状态:\(f[i][j][0/1]\)表示前i个教室,已经申请了j个教室,0表示这个时间段要去\(c_i\),1表示这个时间段要去\(d_i\)

之后开始想转移方程:

一. \(f[i][j][0]\)

  • 上一个教室不参加申请.
  • 上一个教室参加申请.
  • 上一个教室申请失败
  • 上一个教室申请成功

二.\(f[i][j][1]\)

  • 这个教室不参加申请
  • 这个教室申请失败
  • 这个教室申请成功
  • 这个教室参加申请
  • 这个教室申请失败

    上个教室申请成功

    上个教室申请失败
  • 这个教室申请成功

    上个教室申请成功

    上个教室申请失败
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int maxT = 2000 + 7;
const int maxM = 90000 + 7;
const int maxN = 300 + 7; int c[maxT],d[maxT],dis[maxN][maxN];
double k[maxT];
double E[maxT][maxT][2]; inline int read() {
int x = 0,E = 1;char c = getchar();
while(c < '0' || c > '9') {if(c == '-')E = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * E;
} int main() {
int n = read() ,m = read(),v = read(),e = read();
for(int i = 1;i <= n;++ i) c[i] = read();
for(int i = 1;i <= n;++ i) d[i] = read();
for(int i = 1;i <= n;++ i) cin >> k[i];
int u,g,w;
for(int i = 1;i <= v;++ i)
for(int j = 1;j < i;++ j)
dis[i][j] = dis[j][i] = 999999999;
for(int i = 1;i <= e;++ i) {
u = read(),g = read(),w = read();
dis[g][u] = dis[u][g] = min(dis[u][g],w);
}
for(int k = 1;k <= v;++ k)
for(int i = 1;i <= v;++ i)
for(int j = 1;j <= v;++ j)
if(dis[i][k] + dis[k][j] < dis[i][j])
dis[i][j] = dis[j][i] = dis[i][k] + dis[k][j];
for(int i = 1;i <= n;++ i)
for(int j = 0;j <= m;++ j)
E[i][j][0] = E[i][j][1] = 999999999;
E[1][1][1] = E[1][0][0] = 0;
for(int i = 2;i <= n;++ i) {
E[i][0][0] = E[i - 1][0][0] + dis[c[i - 1]][c[i]];
for(int j = 1;j <= min(i,m);++ j) {
E[i][j][0] = min(E[i - 1][j][1] + k[i - 1] * dis[d[i - 1]][c[i]] + (1 - k[i - 1]) * dis[c[i - 1]][c[i]],E[i - 1][j][0] + dis[c[i - 1]][c[i]]);
E[i][j][1] = min(E[i - 1][j - 1][1] + k[i - 1] * k[i] * dis[d[i - 1]][d[i]] + k[i - 1] * (1 - k[i]) * dis[d[i - 1]][c[i]] + (1 - k[i - 1]) * k[i] * dis[c[i - 1]][d[i]] + (1 - k[i - 1]) * (1 - k[i]) * dis[c[i - 1]][c[i]],E[i - 1][j - 1][0] + k[i] * dis[c[i - 1]][d[i]] + (1 - k[i]) * dis[c[i - 1]][c[i]]);
}
}
double minn = 9999999999;
for(int i = 0;i <= m;++ i) minn = min(min(E[n][i][1],E[n][i][0]),minn);
printf("%.2lf\n", minn);
return 0;
}

Bzoj 4720 换教室 (期望DP)的更多相关文章

  1. 换教室(期望+DP)

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

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

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

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

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

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

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

  5. 【bzoj4720】[Noip2016]换教室 期望dp+最短路

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

  6. [BZOJ 4720] 换教室

    Link: BZOJ 4720 传送门 Solution: 2016年$NOIP$考的一道语文题 题面虽长,但思路并不难想 对于这类期望问题,大多数时候都用期望$dp$来解决 根据询问:在$n$个时间 ...

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

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

  8. P1850 换教室 期望dp

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

  9. Luogu P1850 [NOIp2016提高组]换教室 | 期望dp

    题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...

随机推荐

  1. ZooKeeper应用案例

    我们通过学习借鉴,哪些项目或应用都使用了ZooKeeper,可以了解我们的应用使用ZooKeeper是否能真正地带来价值,当然,有些项目可能也未必非常适合使用ZooKeeper,我们要批判地学习.借鉴 ...

  2. ebullient(2018.10.25)

    结论巨好想,每一次操作可以看作把一个b往前移一位,另一个b往后移一位,逆序对个数不改变,判断即可做第一问. 此处代码仅给出第一问做法: #include<cstdio> #include& ...

  3. java操作rabbitmq实现简单的消息发送(socket编程的升级)

    准备: 1.下载rabbitmq并搭建环境(和python那篇一样:http://www.cnblogs.com/g177w/p/8176797.html) 2.下载支持的jar包(http://re ...

  4. iPhone X的适配问题

    //屏幕宽高 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREEN_HEIGHT [UIScreen ...

  5. springMVC-接收数据-参数绑定

    接收数据-参数绑定 #Method Arguments概观 Same in Spring WebFlux The table below shows supported controller meth ...

  6. [已读]JavaScript高级程序设计(第2版)

    经典红皮书~~

  7. POJ - 2186  Popular Cows tarjain模板题

    http://poj.org/problem?id=2186 首先求出所有的强连通分量,分好块.然后对于每一个强连通分量,都标记下他们的出度.那么只有出度是0 的块才有可能是答案,为什么呢?因为既然你 ...

  8. python里面的list、tuple和dict的区别

    Dictionary .Dictionary是Python中内置的数据类型之一,他定义了键和值之间一对一的关系. 每一个元素都有一个key-value对,整个元素集合用大括号{}括起来. 你可以通过k ...

  9. 绘制复杂的原理图元件和pcb封装库用于cadence(一)

    绘制TI公司的TPS53319电源芯片封装 由于产品设计需要大电流电源供电,选用TI公司TPS53319电源芯片通过cadence软件进行电路设计,但是TI公司所提供的封装格式为CAD File(.b ...

  10. P1791 线段覆盖

    题目描述 已知数轴上0<N<10000条线段.每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义.端点坐标在(-999,999)内,坐标为整数.有些线段可能相交.编程 ...