【BZOJ4720】【NOIP2016】换教室 [期望DP]
换教室
Time Limit: 20 Sec Memory Limit: 512 MB
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
2 1 2
1 2 1
0.8 0.2 0.5
1 2 5
1 3 3
2 3 1
Sample Output
HINT
Main idea
给定n个 原本教室ci 和 替换教室di,可以申请m次换课,如果 i 换课了则可以在di上课,否则在ci上课,每个教室之间有距离,求期望最小距离。
Solution
很简单的期望DP,我们令 f[i][j][0\1] 表示 到了第 i 个状态,已经换了 j 次课,这次换不换课,然后分四种情况讨论一下即可。
Code
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std; #define Road(a,b) (double)w[a][b]
#define tense(a,b) a = a<b ? a:b; const int ONE = ;
const double INF = 1e18; int n,m,v,e;
int x,y,z;
int c[ONE],d[ONE];
int w[][];
double f[ONE][ONE][],k[ONE];
double Ans; int get()
{
int res=,Q=;char c;
while( (c=getchar())< || c> )
if(c=='-')Q=-;
res=c-;
while( (c=getchar())>= && c<= )
res=res*+c-;
return res*Q;
} void Floyed()
{
for(int k=; k<=v; k++)
for(int i=; i<=v; i++)
for(int j=; j<=v; j++)
tense(w[i][j], w[i][k] + w[k][j]);
} double Eap10(int i)
{
return Road( c[i],c[i+] ) * (-k[i]) + Road( d[i],c[i+] ) * k[i];
} double Eap01(int i)
{
return Road( c[i],c[i+] ) * (-k[i+]) + Road( c[i],d[i+] ) * k[i+];
} double Eap11(int i)
{
return
Road( c[i], c[i+] ) * (-k[i]) * (-k[i+])
+ Road( c[i], d[i+] ) * (-k[i]) * k[i+]
+ Road( d[i], c[i+] ) * k[i] * (-k[i+])
+ Road( d[i], d[i+] ) * k[i] * k[i+];
} void DisApply(int i,int j)
{
if(j>=) f[i+][j][] = tense(f[i+][j][], f[i][j][] + Road( c[i],c[i+] ) );
if(j>=) f[i+][j][] = tense(f[i+][j][], f[i][j][] + Eap10(i) );
} void Apply(int i,int j)
{
if(j>=) f[i+][j][] = tense(f[i+][j][], f[i][j-][] + Eap01(i) );
if(j>=) f[i+][j][] = tense(f[i+][j][], f[i][j-][] + Eap11(i) );
} int main()
{
n = get(); m = get(); v = get(); e = get();
for(int i=; i<=n; i++) c[i] = get();
for(int i=; i<=n; i++) d[i] = get();
for(int i=; i<=n; i++) scanf("%lf", &k[i]); memset(w, , sizeof(w));
for(int i=; i<=v; i++) w[i][i] = ;
for(int i=; i<=e; i++)
{
x = get(); y = get(); z = get();
w[x][y] = min(w[x][y], z);
w[y][x] = min(w[y][x], z);
}
Floyed(); for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
f[i][j][] = f[i][j][] = INF;
f[][][] = f[][][] = ; for(int i=; i<=n-; i++)
for(int j=; j<=m; j++)
DisApply(i,j), Apply(i,j); Ans = INF;
for(int j=; j<=m; j++)
{
tense(Ans, f[n][j][]);
tense(Ans, f[n][j][]);
} printf("%.2lf",Ans);
}
【BZOJ4720】【NOIP2016】换教室 [期望DP]的更多相关文章
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- 【bzoj4720】[Noip2016]换教室 期望dp+最短路
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...
- JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路
http://172.20.6.3/Problem_Show.asp?id=1457 我不知道为什么我倒着推期望只有80分,所以我妥协了,我对着题解写了个正的,我有罪. #include<cst ...
- 洛谷1850(NOIp2016) 换教室——期望dp
题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是”上一回有没有申请“,而不是”上一回申请成功否“,不然“申请 j 次”就没法转移了. dou ...
- [NOIP2016]换教室 期望dp
先弗洛伊德,然后把状态拆分遗传 #include<iostream> #include<cstdio> #include<cstring> #include< ...
- 洛谷P1850 [noip2016]换教室——期望DP
题目:https://www.luogu.org/problemnew/show/P1850 注释掉了一堆愚蠢,自己还是太嫩了... 首先要注意选或不选是取 min 而不是 /2 ,因为这里的选或不选 ...
- 换教室(期望+DP)
换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...
- 2018.08.30 bzoj4720: [Noip2016]换教室(期望dp)
传送门 一道无脑的期望dp. 用f[i][j][0/1]表示前i堂课提出了j次申请且第i堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...
随机推荐
- eg_1
1. 编写一个程序,输出一个字符串中的大写英文字母个数,小写英文字母个数以及非英文字母个数. 第一种方法: public class Test { public static void main(St ...
- 【转载】【翻译】Breaking things is easy///机器学习中安全与隐私问题(对抗性攻击)
原文:Breaking things is easy 译文:机器学习中安全与隐私问题(对抗性攻击) 我是通过Infaraway的那篇博文才发现cleverhans-blog的博客的,这是一个很有意思的 ...
- Git命令基本操作
本文从以下九个方面,介绍Git命令的基本操作: 一. Git安装 二. Git基本配置 三. 创建Git仓库 四. 获得Git仓库 五. 提交更新 六. 提交历史查看 七. 远程仓库 八. 打Tags ...
- 【.NET】- Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...
- WIN7使用过360系统急救箱后出现的任务计划程序文件夹删除的办法
直接进主题(怀疑系统有问题用了下360系统急救箱,用完后发现计划任务多了个360superkiller文件夹,右键直接是删除不了的) 尝试了各种方法都是不爽,突然想到计划任务不是在在系统盘下的一个文件 ...
- 从一个简单的main方法执行谈谈JVM工作机制
本来JVM的工作原理浅到可以泛泛而谈,但如果真的想把JVM工作机制弄清楚,实在是很难,涉及到的知识领域太多.所以,本文通过简单的mian方法执行,浅谈JVM工作原理,看看JVM里面都发生了什么. 先上 ...
- 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp
题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...
- select、poll、epoll模型对比
select.poll.epoll模型对比 先说Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024. ...
- BZOJ3223:文艺平衡树——超详细题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面复制于洛谷. 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写 ...
- C++中swap函数
本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template<class T> voi ...