【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堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...
随机推荐
- 【IdentityServer4文档】- 支持协议
IdentityServer 实现了以下协议: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 ( ...
- C++并行编程1
what is concurrency 我们可以一边看电视,一边唱歌.人并行非常容易理解,但是计算机呢?是不是我们一边编辑着word文档,一边听着歌,这样计算机就是在并行吗?不一定欧,如果你计算机是单 ...
- IIS安装出现“安装程序无法复制文件CONVLOG.EX_”的解决办法
重新安装了一次IIS,结果就在重新安装的时候,出现安装程序无法复制文件CONVLOG.EX_,上网找了找资料,是因为secedit.sdb 数据库的问题,既然是因为这个文件的问题,那么我们就可以使用w ...
- phpmyadmin打开空白
本地phpstudy环境,打开 phpmyadmin,登陆之后,显示空白页面. 解决办法:切换为 低版本的php版本,正常登陆.
- (转)Linux NUMA引发的性能问题
最近某客户的核心业务系统又出了翻译缓慢的情况.该问题在6月份也出现过,当时进行了一次调整. 我们首先来看下故障时间段的awr报告: 单纯的从TOP 5 event,基本上是看不出任何东西的,可能有人会 ...
- C运行时库
原文地址:http://blog.csdn.net/wqvbjhc/article/details/6612099 在开发window程序是经常会遇到编译好好的程序拿到另一台机器上面无法运行的情况,这 ...
- Java设计
重构前 CustomDataChar | getConnection()findCustomers()createChar()displayChar() 重构后 CustomDataChar | da ...
- 【python】用 sqlacodegen 将存在的数据库表 转化成model.py
Flask的sqlalchemy对数据库表的模型提供了很多易用的方法.为了使用这些内容,需要将数据库表按照Flask识别的格式创建成Model,但是一般我们都是在已经创建好的数据库环境中开发Pytho ...
- 【poj2104】K-th Number 主席树
题目描述 You are working for Macrohard company in data structures department. After failing your previou ...
- C# Socket服务端与客户端通信(包含大文件的断点传输)
步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤: (1)建立一个Socket (2)接收 ...