【BZOJ】4720: [Noip2016]换教室
4720: [Noip2016]换教室
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 1690 Solved: 979
[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
Solution
$dp[i][j][0] = min(dp[i-1][j][0] + G[c[i-1]][c[i]], dp[i-1][j][1] + G[c[i-1]][c[i]] * (1.0-p[i-1]) + G[d[i-1]][c[i]] * p[i-1]);$
$if(j >= 1) dp[i][j][1] = min(dp[i-1][j-1][0] + G[c[i-1]][c[i]] * (1.0 - p[i]) + G[c[i-1]][d[i]] * p[i], dp[i-1][j-1][1] + G[c[i-1]][c[i]] * (1.0 - p[i-1]) * (1.0 - p[i])+ G[c[i-1]][d[i]] * (1.0 - p[i-1]) * p[i] + G[d[i-1]][c[i]] * (1.0 - p[i]) * p[i-1] + G[d[i-1]][d[i]] * p[i-1] * p[i]);$
这里$G$表示预处理出来的最短路。
Code
#include<bits/stdc++.h>
using namespace std; double dp[][][], G[][], p[];
int c[], d[];
int main() {
int n, m, v, e;
scanf("%d%d%d%d", &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", &p[i]);
for(int i = ; i <= v; i ++)
for(int j = ; j <= v; j ++) G[i][j] = 0x3f3f3f3f;
for(int i = ; i <= e; i ++) {
int a, b; double c;
scanf("%d%d%lf", &a, &b, &c);
G[a][b] = min(G[a][b], c);
G[b][a] = G[a][b];
}
for(int i = ; i <= v; i ++) G[i][i] = ;
for(int k = ; k <= v; k ++)
for(int i = ; i <= v; i ++)
for(int j = ; j <= v; j ++)
G[i][j] = min(G[i][j], G[i][k] + G[k][j]);
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
for(int k = ; k <= ; k ++)
dp[i][j][k] = 0x3f3f3f3f;
dp[][][] = , dp[][][] = ;
for(int i = ; i <= n; i ++)
for(int j = ; j <= m && j <= i; j ++) {
dp[i][j][] = min(dp[i-][j][] + G[c[i-]][c[i]], dp[i-][j][] + G[c[i-]][c[i]] * (1.0-p[i-]) + G[d[i-]][c[i]] * p[i-]);
if(j >= ) {
dp[i][j][] = min(dp[i-][j-][] + G[c[i-]][c[i]] * (1.0 - p[i]) + G[c[i-]][d[i]] * p[i], dp[i-][j-][] + G[c[i-]][c[i]] * (1.0 - p[i-]) * (1.0 - p[i])
+ G[c[i-]][d[i]] * (1.0 - p[i-]) * p[i] + G[d[i-]][c[i]] * (1.0 - p[i]) * p[i-] + G[d[i-]][d[i]] * p[i-] * p[i]);
}
}
double ans = 0x3f3f3f3f;
for(int i = ; i <= m; i ++)
for(int j = ; j <= ; j ++)
ans = min(ans, dp[n][i][j]);
printf("%.2lf", ans);
}
【BZOJ】4720: [Noip2016]换教室的更多相关文章
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
- bzoj 4720: [Noip2016]换教室【期望dp】
状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =) #include<iostream> #include<cstdio ...
- BZOJ P4720[Noip2016]换教室____solution
题目太长不表 <--无形传送,最为致命 学习一点数学期望的基础,预处理最短路,然后加上DP即可.(废话) 理解决策和结果的差别: 在这里每阶段的决策有两个:申请|不申请 结果有两个:换|不换 然 ...
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- [NOIP2016]换教室 题解(奇怪的三种状态)
2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...
- NOIP2016换教室 BZOJ 4720
BZOJ 4720 换教室 题目描述: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上 ...
- 【bzoj4720】[NOIP2016]换教室
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- [NOIp2016] 换教室
题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...
随机推荐
- go 匿名函数和闭包
匿名函数 1. 函数也是一种类型,因此可以定义作为一个函数类型的变量 package main import "fmt" // 函数作为参数 func add(a, b int) ...
- 【读书笔记::深入理解linux内核】内存寻址【转】
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...
- vs2010,vs2012注释快捷键
注释:VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C) 反注释:VS2010是(Ctrl+E,U),VS2012是(Ctrl+K, Ctrl+U)
- MySQL 删除数据
删除数据的语句有三种:DELETE.DROP.TRUNCATE. 1.DELETE语句 DELETE 语句用于删除表中的行. 语法 DELETE FROM 表名称 WHERE 列名称 = 值 例如 - ...
- hibernate的枚举注解@Enumerated
@Enumerated(value=EnumType.ORDINAL)采用枚举类型的序号值与数据库进行交互, 此时数据库的数据类型需要是数值类型,例如在实际操作中 CatTest ct = new C ...
- vue项目中遇到的一些问题
或访问:https://github.com/littleHiuman/experiences-about-vue 欢迎补充! vuex 状态 vue-cli 命令行 vue vue vue-rou ...
- 下一代Android打包工具,100个渠道包只需要10秒钟 https://github.com/mcxiaoke
https://github.com/mcxiaoke/packer-ng-plugin https://github.com/Meituan-Dianping/walle https://githu ...
- Docker中安装wiki Confluence
一下内容在centos 7安装成功. 一.安装docker 1.yum安装docker yum update # 更新yum yum install docker # yum安装docker 2.开启 ...
- java基础77 Http协议及Servlet中的GET、POST提交方式
本文知识点(目录): 1.什么是http协议 2.查看http协议的工具 3.http协议的内容 4.请求方式 5.请求头和响应头(以及获取请求头信息的方法) 6.实体内 ...
- 本地删除文件,git远程不同步删除
git add -a 或 git add * 它能stages所有文件,包括之前删除的痕迹 git add . 只能stages新文件和被修改的文件,不会stages已被删除的文件 步骤如下: 1) ...