bzoj4720
期望dp
n久以前做过,再做一遍
你只能决定决策,不能决定结果,这是这道题的关键,因为我们换了教室不一定成功,所以我们应该这样设dp状态,dp[i][j][k],第i天,换j次,换没换,转移:
dp[i][j][0] = max(dp[i-1][j][0] + dis[c[i-1]][c[i]], dp[i-1][j-1][1] + dis[c[i-1]][c[i]]*(1.0-k[i]) + dis[d[i-1]][c[i]] * k[i]) 之前也不换,那么只可能从c[i-1]转移过来,之前申请了,那么有可能成功也可能没成功,于是就是上次的期望值+dis换*k[i]+dis不换*(1.0-k[i]),就是概率乘上值的和,这就是期望,然后下面具体看代码。
我0和1写错了还能在uoj上有80
感觉加深了对期望dp的理解,你只能决定决策,不能决定结果,所以我们要从之前所有可能的状态转移过来,设状态也不能设错,比如dp[i][j][k]表示i天j次在c[i]还是d[i],因为换教室是有概率的,不能决定结果
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = ;
int c[N], d[N];
int n, m, v, e;
double dis[][], dp[N][N][], k[N];
int main()
{
cin >> n >> m >> v >> e;
for(int i = ; i <= n; ++i) scanf("%d", &c[i]);
for(int i = ; i <= n; ++i) scanf("%d", &d[i]);
for(int i = ; i <= n; ++i) scanf("%lf", &k[i]);
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j) dp[i][j][] = dp[i][j][] = 1e9;
for(int i = ; i <= v; ++i)
for(int j = ; j <= v; ++j) if(i != j) dis[i][j] = 1e9;
for(int i = ; i <= e; ++i)
{
int u, v;
double w;
scanf("%d%d%lf", &u, &v, &w);
dis[u][v] = min(dis[u][v], w);
dis[v][u] = min(dis[v][u], w);
}
for(int x = ; x <= v; ++x)
for(int i = ; i <= v; ++i) if(i != x)
for(int j = ; j <= v; ++j) if(i != j && j != x) dis[i][j] = min(dis[i][j], dis[i][x] + dis[x][j]);
dp[][][] = dp[][][] = 0.0;
for(int i = ; i <= n; ++i)
for(int j = ; j <= min(m, i); ++j)
{
dp[i][j][] = min(dp[i - ][j][] + dis[c[i]][c[i - ]], (dp[i - ][j][] + dis[d[i - ]][c[i]]) * k[i - ] + (dp[i - ][j][] + dis[c[i - ]][c[i]]) * (1.0 - k[i - ]));
if(j > )
{
dp[i][j][] = min((dp[i - ][j - ][] + dis[c[i - ]][c[i]]) * (1.0 - k[i]) + (dp[i - ][j - ][] + dis[c[i - ]][d[i]]) * k[i],
(dp[i - ][j - ][] + dis[d[i - ]][d[i]]) * k[i - ] * k[i] + (dp[i - ][j - ][] + dis[c[i - ]][d[i]]) * (1.0 - k[i - ]) * k[i] + (dp[i - ][j - ][] + dis[d[i - ]][c[i]]) * k[i - ] * (1.0 - k[i]) + (dp[i - ][j - ][] + dis[c[i - ]][c[i]]) * (1.0 - k[i - ]) * (1.0 - k[i]));
}
}
double ans = 1e100;
for(int i = ; i <= m; ++i) ans = min(ans, min(dp[n][i][], dp[n][i][]));
printf("%.2f\n", ans);
return ;
}
bzoj4720的更多相关文章
- 【bzoj4720】[NOIP2016]换教室
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- BZOJ4720 [Noip2016]换教室
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- bzoj4720 / P1850 换教室(Floyd+期望dp)
P1850 换教室 先用Floyd把最短路处理一遍,接下来就是重头戏了 用 f [ i ][ j ][ 0/1 ] 表示在第 i 个时间段,发出了 j 次申请(注意不一定成功),并且在这个时间段是否( ...
- 【BZOJ4720】【NOIP2016】换教室
我当年真是naive…… 原题: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节 ...
- 2018.08.30 bzoj4720: [Noip2016]换教室(期望dp)
传送门 一道无脑的期望dp. 用f[i][j][0/1]表示前i堂课提出了j次申请且第i堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- 【BZOJ4720】【NOIP2016】换教室 [期望DP]
换教室 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description Input 第一行四个整数n,m,v ...
- 【bzoj4720】[Noip2016]换教室 期望dp+最短路
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...
- 【bzoj4720】【noip2016】【换座位】期望dp+Floyd
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62370736 wa...已经快一年了,重新来做这 ...
随机推荐
- 2016阿里校招python研发面试
一面: 面:说说你们学校的主修课程. 学校开的全是尼玛java课,这个我是想了有一会的. 面:看你简历写了会jquery,来问你个简单的jquery问题 :jQuery支不支持css引入. 呵呵 面: ...
- 洛谷P1771 方程的解_NOI导刊2010提高(01)
题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数), ...
- 【设计模式】GOF设计模式趣解(23种设计模式)
创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说 ...
- 《TCP/IP详解卷1:协议》——第4章 ARP:地址解析协议(转载)
章节回顾: 1.引言 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口的.设备驱动程序从不检查IP数据报中的目的IP地址.地址解析为这两种不同 ...
- ubuntu 配置 samba, win7 map network device from linux
一. samba的安装: # sudo apt-get insall samba # sudo apt-get install smbfs 二. 创建共享目录,或是找已经存在的文件夹,只要权限放开就行 ...
- 【微信小程序】开发实战 之 「开发框架MINA构成」
小程序开发框架的目标是通过尽可能简单.高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务. 微信团队为小程序提供的框架命名为MINA.MINA框架通过封装微信客户端提供的文件系统.网络通信 ...
- 解决idea中启动tomcat出现控制台乱码问题
尝试了很多方法,最后终于解决了,现在提供给大家一个我认为最简单也最有效的方案. 1.修改配置文件 找到idea的安装目录,在bin文件夹下找到以下两个文件,用记事本或者其他软件打开: 然后两个文件中都 ...
- 转:Linux中的内存管理
前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...
- jQuery的一些总结(持续更新中...)
本文为原创,转载请注明出处: cnzt 文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6693399.html 1. $.expr[':'] 过滤 ...
- Nexus3.0.1如何上传第三方插件
原文:http://blog.csdn.net/wang465745776/article/details/52527905 前提条件 Nexus 3.0.1 提出问题 如何上传第三方插件到Nexus ...