luoguP1850 换教室

链接

https://www.luogu.org/problemnew/show/P1850

思路

状态很显然就是f[n][k][0/1]

前i次,用了k次机会,当前是在哪个教室

转移就很、、了。

每次转移i的时候,一定是从i的两个可能的教室来的。

那就有四种可能的方式了。

先考虑不换的情况,即\(k = 0\)时的情况

\(C1 = c[i - 1], C2 = d[i - 1], C3 = c[i], C4 = d[i]\)

\(mp[i][j]\)表示\(i,j\)间的最短路

\(dp[i][j][0] =min\begin{cases} dp[i - 1][j][0] + mp[C1][C3]\\dp[i - 1][j][1] + mp[C1][C3] * (1 - k[i - 1]) + mp[C2][C3] * k[i - 1]\end{cases}\)

显然如果\(i-1\)时没有换教室那么,\(i - 1\)到\(i\)只有一种情况就是都不换教室,如果\(i - 1\)时换了教室那么就有两种情况\(i - 1\)换成功了,或者没换成功所以就是对应的路径长乘上对应的概率

$dp[i][j][1] =min\begin{cases} dp[i - 1][j - 1][0] + mp[C1][C3] * (1 - k[i]) + mp[C1][C4] * k[i]\dp[i - 1][j - 1][1] + mp[C2][C4] * k[i] * k[i - 1] + mp[C2][C3] * k[i - 1] * (1 - k[i]) + mp[C1][C4] * (1 - k[i - 1]) * k[i] + mp[C1][C3] * (1 - k[i - 1]) * (1 - k[i])\end{cases} $

ORZ 大佬

错误

数组开小了

floyd的k写到外边了

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2e3+7,M=307;
const double inf=10000000000000000000.0;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s<='9'&&s>='0';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,m,v,e,c[N],d[N],dis[M][M];
double k[N],f[N][N][2];
int main() {
n=read(),m=read(),v=read(),e=read();
for(int i=1;i<=n;++i) c[i]=read();
for(int i=1;i<=n;++i) d[i]=read();
for(int i=1;i<=n;++i) scanf("%lf",&k[i]);
for(int i=1;i<=v;++i) {
for(int j=1;j<=v;++j) dis[i][j]=0x3f3f3f3f;
dis[i][i]=0;
}
for(int i=1;i<=e;++i) {
int a=read(),b=read(),val=read();
dis[a][b]=dis[b][a]=min(dis[a][b],val);
}
for(int mmp=1;mmp<=v;++mmp)
for(int i=1;i<=v;++i)
for(int j=1;j<=v;++j)
dis[i][j]=min(dis[i][j],dis[i][mmp]+dis[mmp][j]);
for(int i=1;i<=n;++i)
for(int j=0;j<=m;++j)
f[i][j][0]=f[i][j][1]=inf;
f[1][0][0]=f[1][1][1]=0;
for(int i=2;i<=n;++i) {
for(int j=0;j<=m;++j) {
f[i][j][0]=min(f[i-1][j][0]+dis[c[i-1]][c[i]],
f[i-1][j][1]+k[i-1]*dis[d[i-1]][c[i]]+(1.0-k[i-1])*dis[c[i-1]][c[i]]);
if(j)
f[i][j][1]=min(f[i-1][j-1][0]+k[i]*dis[c[i-1]][d[i]]+(1.0-k[i])*dis[c[i-1]][c[i]],
f[i-1][j-1][1]+k[i]*k[i-1]*dis[d[i-1]][d[i]]+
k[i]*(1.0-k[i-1])*dis[c[i-1]][d[i]]+
(1.0-k[i])*k[i-1]*dis[d[i-1]][c[i]]+
(1.0-k[i])*(1.0-k[i-1])*dis[c[i-1]][c[i]]);
}
}
double ans=inf;
for(int i=0;i<=m;++i) ans=min(ans,min(f[n][i][0],f[n][i][1]));
printf("%.2lf\n",ans);
return 0;
}

luoguP1850 换教室的更多相关文章

  1. 【bzoj4720】[NOIP2016]换教室

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...

  2. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  3. [BZOJ 4720][NOIP 2016] 换教室

    记得某dalao立了"联赛要是考概率期望我直播吃键盘"的$flag$然后就有了这道题233333 4720: [Noip2016]换教室 Time Limit: 20 Sec  M ...

  4. [NOIp2016] 换教室

    题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...

  5. bzoj4720 / P1850 换教室(Floyd+期望dp)

    P1850 换教室 先用Floyd把最短路处理一遍,接下来就是重头戏了 用 f [ i ][ j ][ 0/1 ] 表示在第 i 个时间段,发出了 j 次申请(注意不一定成功),并且在这个时间段是否( ...

  6. BZOJ 4720 [Noip2016]换教室

    4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...

  7. 洛谷 P1850 换教室 解题报告

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1≤i≤n) ...

  8. P1850 换教室

    P1850 换教室 现在有一张图, 有 \(v <= 300\) 个节点 你需要从 \(c_{1}\) 到 \(c_{2}\) 到 \(c_{n} (n <= 2000)\) 现在你有 \ ...

  9. 【BZOJ】4720: [Noip2016]换教室

    4720: [Noip2016]换教室 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1690  Solved: 979[Submit][Status ...

随机推荐

  1. HTML5语音合成Speech Synthesis API简介

    by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5865本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意 ...

  2. js运用5

    js数据类型具体分析 1.基础类型:string   number boolean null undefined 2.引用类型:object==>        json    array    ...

  3. Windows下64位Apache+PHP+MySQL配置

    软件下载 目前,Apache和PHP均未出现官方的64位版本. Apache 64位: http://files.cnblogs.com/liangjie/httpd-2.2.19-win64.rar ...

  4. 自定制property

    class Lazyproperty: def __init__(self, func): self.func = func def __get__(self, instance, owner): p ...

  5. HTTP协议工作原理

    HTTP简介        超文本传输协议(HTTP:Hypertext Transport Protocol)是万维网应用层的协议,它通过两个程序实现:一个是客户端程序(各种浏览器),另一个是服务器 ...

  6. 常用oracle hints

    在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方 ...

  7. Fiddler (进阶)内置命令与断点

    Fiddler 内置命令与断点 命令 对应请求项 介绍 示例 ? All 问号后边跟一个字符串,可以匹配出包含这个字符串的请求 ?google > Body 大于号后面跟一个数字,可以匹配出请求 ...

  8. jstl 与 el表达式

    jar下载地址参考:https://blog.csdn.net/qq_30062589/article/details/80224080 <%@ page language="java ...

  9. bugfree3.0.1-导入excel测试用例

    大多数项目里只用BugFree做缺陷管理工具,其实还可以通过该工具导入测试用例,记录测试结果,最后获得统计结果. 难点 1.导入文件要求XML格式: 2.一般我们的测试用例都是用excle文件存取,很 ...

  10. docker容器与镜像

    就像cad图层概念 数据卷就是为了完成数据持久化操作