刚发现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. spark sql 优化心得

    本篇文章主要记录最近在使用spark sql 时遇到的问题已经使用心得. 1 spark 2.0.1 中,启动thriftserver 或者是spark-sql时,如果希望spark-sql run ...

  2. 利用多项式实现图像几何校正(Matlab实现)

    1.原理简述:     根据两幅图像中的一些已知对应点(控制点对),建立函数关系式,通过坐标变换,实现失真图像的几何校正. 设两幅图像坐标系统之间畸变关系能用解析式来描述: 根据上述的函数关系,可以依 ...

  3. 第一篇 HTML5打包APP之VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)

    1.1.2安装环境: 1.1.3所需资源: 1.1.4 Unlocker 3.0解锁 1.1.5 配置环境 1.1.6开始安装 1.1.7开启虚拟机进入MAC安装界面 1.1.8 macOS 10.1 ...

  4. webpack结合vue使用(五)

    webpack结合vue使用步骤如下: 安装 vue 的包 : cnpm i vue -S 由于在 webpack 中,锐减使用 .vue 这个组件模板文件定义组件,所以需要安装能解析这种文件的第三方 ...

  5. github添加版本号

    1.将官方的库clone下来 http://github.com/xxx.xxx.git 2.修改要修改的地方 3.git add src 4.commit -m 'xxx'   5.git push ...

  6. a标签中href=""的几种用法

    http://blog.csdn.net/u010297791/article/details/52784879 这是分页上的 <?php function pages($page,$e_pag ...

  7. python入门之实例-商品选择

    需求: 显示一系列商品,根据序号选择商品 li = ["手机","电脑","电视"] #函数enumerate在for循环遍历的时候,会默认 ...

  8. 540 Single Element in a Sorted Array 有序数组中的单一元素

    给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数.示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2 示例 2:输入: [3,3,7,7,10,1 ...

  9. 打包google浏览器插件到本地

    依次打开‘更多工具’--->'扩展程序',或者在google浏览器输入chrome://extensions/网址就可以打开已安装插件页面,在顶部选中‘开发者模式’后就会出现每个插件的ID,这个 ...

  10. Linux--NiaoGe-Service-04

    操作系统版本:CentOS 6.10 x86_64 查看内核所获取到的网卡信息 [root@xueji ~]# dmesg | grep -in eth :e1000 ::-bit) :0c::6b: ...