LOJ2360. 「NOIP2016」换教室【概率DP】【Floyed】【傻逼题】
思路
先floyed出两点最短路
然后就可以直接\(dp_{i,j,0/1}\)表示前i节课选择换j节,换不换当前这一节的最小贡献
直接可以枚举上一次决策的状态计算概率进行统计就可以了
我变量名写重了僵硬了半天。。。。被安排了
//Author: dream_maker
#include<bits/stdc++.h>
using namespace std;
//----------------------------------------------
//typename
typedef long long ll;
//convenient for
#define fu(a, b, c) for (int a = b; a <= c; ++a)
#define fd(a, b, c) for (int a = b; a >= c; --a)
#define fv(a, b) for (int a = 0; a < (signed)b.size(); ++a)
//inf of different typename
const int INF_of_int = 1e9;
const ll INF_of_ll = 1e18;
//fast read and write
template <typename T>
void Read(T &x) {
bool w = 1;x = 0;
char c = getchar();
while (!isdigit(c) && c != '-') c = getchar();
if (c == '-') w = 0, c = getchar();
while (isdigit(c)) {
x = (x<<1) + (x<<3) + c -'0';
c = getchar();
}
if (!w) x = -x;
}
template <typename T>
void Write(T x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9) Write(x / 10);
putchar(x % 10 + '0');
}
//----------------------------------------------
const int N = 2010;
const int M = 310;
double g[M][M], p[N];
double dp[N][N][2];
int c[N], d[N];
int n, m, v, e;
int main() {
Read(n), Read(m), Read(v), Read(e);
fu(i, 1, n) Read(c[i]);
fu(i, 1, n) Read(d[i]);
fu(i, 1, n) scanf("%lf", &p[i]);
fu(i, 1, v)
fu(j, 1, v) g[i][j] = 1e8;
fu(i, 1, e) {
int x, y; double w;
Read(x), Read(y); scanf("%lf", &w);
g[x][y] = g[y][x] = min(w, g[x][y]);
}
fu(i, 1, v) g[i][i] = 0.0;
fu(k, 1, v)
fu(i, 1, v) if (i != k)
fu(j, 1, v) if (j != k)
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
double ans = 1e8;
fu(i, 1, n)
fu(j, 0, m) dp[i][j][0] = dp[i][j][1] = 1e8;
dp[1][0][0] = dp[1][1][1] = 0;
fu(i, 2, n) {
fu(j, 0, m) {
dp[i][j][0] = min(dp[i - 1][j][1] + p[i - 1] * g[d[i - 1]][c[i]] + (1.0 - p[i - 1]) * g[c[i - 1]][c[i]], dp[i - 1][j][0] + g[c[i - 1]][c[i]]);
if (j) dp[i][j][1] = min(dp[i - 1][j - 1][1] + p[i - 1] * p[i] * g[d[i - 1]][d[i]] + (1.0 - p[i - 1]) * p[i] * g[c[i - 1]][d[i]] + p[i - 1] * (1.0 - p[i]) * g[d[i - 1]][c[i]] + (1.0 - p[i - 1]) * (1.0 - p[i]) * g[c[i - 1]][c[i]], dp[i - 1][j - 1][0] + (p[i] * g[c[i - 1]][d[i]] + (1.0 - p[i]) * g[c[i - 1]][c[i]]));
}
}
fu(i, 0, m) ans = min(ans, min(dp[n][i][0], dp[n][i][1]));
printf("%.2lf", ans);
return 0;
}
LOJ2360. 「NOIP2016」换教室【概率DP】【Floyed】【傻逼题】的更多相关文章
- [LOJ] #2360. 「NOIP2016」换教室
期望DP #include<iostream> #include<cstring> #include<cstdio> #include<cctype> ...
- 「NOIP2016」换教室
传送门 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 $ 2n $ 节课程安排在 $ n $ 个时间段上.在第 $ i ...
- 「NOIP2016」「P1850」 换教室(期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq i \leq n1≤ ...
- 【BZOJ4720】【NOIP2016】换教室 [期望DP]
换教室 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description Input 第一行四个整数n,m,v ...
- P1850 换教室 概率dp
其实说是概率dp,本质上和dp没什么区别,就是把所有可能转移的情况全枚举一下就行了,不过dp方程确实有点长... ps:这个题的floyed我竟然之前写跪了... 题目: 题目描述 对于刚上大学的牛牛 ...
- 【NOIP2016】换教室(DP,期望)
题意: 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程 ...
- luogu 1850 换教室 概率+dp
非常好的dp,继续加油练习dp啊 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) ...
- LOJ2537. 「PKUWC2018」Minimax【概率DP+线段树合并】
LINK 思路 首先暴力\(n^2\)是很好想的,就是把当前节点概率按照权值大小做前缀和和后缀和然后对于每一个值直接在另一个子树里面算出贡献和就可以了,注意乘上选最大的概率是小于当前权值的部分,选最小 ...
- 换教室(期望+DP)
换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...
随机推荐
- Enter键禁止表单提交
Enter键禁止表单提交js代码: //禁用Enter键表单自动提交 document.onkeydown = function (event) { var target, code, tag; if ...
- javascript中对变量类型的判断
本文正式地址:http://www.xiabingbao.com/javascript/2015/07/04/javascript-type 在JavaScript中,有5种基本数据类型和1种复杂数据 ...
- git命令速记
对于不常写代码,有的时候又要提交点代码的人来说,git命令记了又忘,忘了又去花精力记住.有没有一种速记方法,来帮助我们记忆这些玩意呢? 纯属抄袭@_@! 除了几个很基本的命令,复杂一点的,我都要去查, ...
- Windows 系统cmd设置添加静态路由方式
电脑上添加静态路由,cmd设置路由 方法/步骤 1.首先在“运行”窗口输入cmd(按WIN+R打开运行窗口),然后回车进入命令行,输入 route add 10.253.251.0 mask ...
- C++复习4.函数设计基础
C/C++ 函数设计基础 20130918 函数式程序的基本功能单元,是模块化程序设计的基础,即使函数的功能正确是不够的,因为函数设计的细微缺点很容易导致函数被错用. 了解函数的基本知识,堆栈和堆的相 ...
- webapi在IIS发布后报Http 403.14 error
服务器是Windows Server 2008 R2 Enterprise IIS6.1 解决方法,修改web.config文件 1.在<system.webServer>配置 ...
- hdu 1536&&1944 S-Nim sg函数 难度:0
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HM visual studio编译报错
今天,编译HM的代码,发现编译报如下错误. error MSB6003: The specified task executable "cl.exe" could not be r ...
- three.js入门——先跑个旋转的正方体
WebGl中文网看了几篇教程,又百度了几篇文章,顿时感觉手痒,打开编辑器,写个demo玩玩. demo是写在vue项目中的,所以首先: npm install three --save; npm in ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
关键字 从Drools 5开始引入了硬关键字和软关键字.硬关键字是保留关键字,在命名demo对象,属性,方法,函数和规则文本中使用的其他元素时,不能使用任何硬关键字.以下是必须避免的硬关键字: (1) ...