刚发现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. 一个Java语言所写的shop网站框架明细

    核心框架Spring Framework :作为一个优秀的开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用 ...

  2. ZooKeeper-3.3.4集群安装配置(转载)

    ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization).命名服务(Naming S ...

  3. 分布式通信-tcp/ip socket

    Socket通讯的过程 Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受) ...

  4. django-返回客户端外网ip服务

    在服务器应用初始化的时候,比如salt-minion,需要在配置文件里说明自己的id,一般用ip. 如果都在一个内网里,从ip命令里获取就行了. 但现在的企业后台环境更加复杂,很多都是跨机房.有物理机 ...

  5. C# 基础之密封类

    C#密封类 一.密封类 1. 密封类的定义 如果我们不希望自己编写的类被继承:如果有的类已经没有再被继承的必要,这时,我们可以使用sealed修饰符在类中进行声明,以达到该类不能派生其它类的目的,该类 ...

  6. AKOJ-2010-魔法石

    链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=2010 题意: Vyoung最近收集到一大批魔法石,这些魔法石有两种特性,攻击和防守,不同特性的两 ...

  7. Influxdb 时序数据库 centos 安装

    Influxdb 环境搭建 操作系统:CentOS 7 X64 SSH工具:PuTTY 操作系统安装,请参照官网文档进行:https://www.centos.org/ 使用PuTTY 通过ssh连接 ...

  8. hdu4578Transformation(线段树多个lz标记)

    这里以3次方来举例讲一下这题的做法,其它维类似. 如果要求某一个值的3次方那么sum = t^3,设t = x+y.那也就是sum = (x+y)^3. 假如我让每个数都加z t = x+y+z,我可 ...

  9. myBati初学

    创建数据库(y2165) MyBatis环境搭建1.在pom.xml引入依赖2.得替换build节点,为了让程序编译在main中所有子包下的配置文件3.构建大配置,位于resources<?xm ...

  10. 重新安装Magento2 Module

    如何重新安装Magento2的Module? 分类 2 类: Module是通过 composer 安装的:在命令行输入:php bin/magento module:uninstall Module ...