【期望+状压DP】 2021 CCPC G

Problem - G - Codeforces

题意:

 

 

思路:

注意到 k 的范围是18,可以考虑状压

要求最小的期望长度,我们可以遍历所有可能的路径,统计这些路径的期望长度的最小值即可

那么怎么遍历呢?这里很经典的处理方式是状压DP

设 dp[x][st] 为 当前处于 x 结点上,且经过的结点状态为 st 的最小期望路径长度

这里的状压DP我们用记忆化搜索解决

可能关于期望的状压DP用记忆化搜索会好处理一点(?)

注意到在转移过程中需要用到用了哪辆车的两点之间的最短路,因此我们考虑预处理这个最短路,这个就类似于分层图的思想搞一搞就好了

Code:

#include <bits/stdc++.h>#define int long longconstexpr int N = 1e5 + 10;
constexpr int Inf = 1e18;struct ty2 {int x, dis;bool operator < (const ty2 & a) const {return a.dis < dis;}
};std::vector<std::pair<int,int> > adj[N];
std::priority_queue<ty2> q;int n, m, k;
int a[N];
int dis[20][N], vis[N];
double t, r;
double dp[20][(1 << 20)], p[N];void dij(int st, int id) {for (int i = 1; i <= n; i ++) {vis[i] = 0;dis[id][i] = Inf;}dis[id][st] = 0;q.push({st, dis[id][st]});while(!q.empty()) {auto u = q.top();q.pop();if (vis[u.x]) continue;vis[u.x] = 1;for (auto [v, w] : adj[u.x]) {if (dis[id][v] > dis[id][u.x] + w) {dis[id][v] = dis[id][u.x] + w;q.push({v, dis[id][v]});}}}
}
double dfs(int x, int st) {if (dp[x][st]) return dp[x][st];double res = 1.0 * p[x] * dis[x][n] / t + (1.0 - p[x]) * dis[x][n] / r;for (int j = 1; j <= k; j ++) {if ((st >> (j - 1)) & 1) continue;res = std::min(res, 1.0 * (1 - p[x]) * dis[x][n] / r + p[x] * (1.0 * dis[x][a[j]] / t + dfs(j, st | (1 << (j - 1)))));}return dp[x][st] = res;
}
void solve() {std::cin >> t >> r >> n >> m;for (int i = 1; i <= m; i ++) {int u, v, w;std::cin >> u >> v >> w;adj[u].push_back({v, w});adj[v].push_back({u, w});}std::cin >> k;for (int i = 1; i <= k; i ++) {std::cin >> a[i] >> p[i];p[i] /= 100.0;}a[0] = 1, p[0] = 1.0;for (int i = 0; i <= k; i ++) {dij(a[i], i);}if (dis[0][n] >= Inf) {std::cout << -1 << "\n";return;}std::cout << std::fixed << std::setprecision(10) << dfs(0, 0) << "\n";
}
signed main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t = 1;while(t --) {solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/115576.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识软件工程

软件工程是一门涵盖软件开发、维护和管理的学科&#xff0c;它通过应用工程化的原则和方法来提高软件系统的质量和可靠性。在当今数字化和信息化的时代&#xff0c;软件工程对于现代社会的各个领域都具有至关重要的作用。 基本概念&#xff1f; 计算机系统中与硬件相互依存的一…

复习Day01:数组part01:701. 二分查找、35. 搜索插入位置、367. 有效的完全平方数、69. x的平方根、74. 搜索二维矩阵

之前的blog链接&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131690654?spm1001.2014.3001.5501 我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Lab…

ruoyi框架修改左侧菜单样式

菜单效果 ruoyi前端框架左侧的菜单很丑&#xff0c;我们需要修改一下样式&#xff0c;下面直接看效果。 修改代码 1、sidebar.scss .el-menu-item, .el-submenu__title {overflow: hidden !important;text-overflow: ellipsis !important;white-space: nowrap !important;//…

API文档搜索引擎

导航小助手 一、认识搜索引擎 二、项目目标 三、模块划分 四、创建项目 五、关于分词 六、实现索引模块 6.1 实现 Parser类 6.2 实现 Index类 6.2.1 创建 Index类 6.2.2 创建DocInfo类 6.2.3 创建 Weight类 6.2.4 实现 getDocInfo 和 getInverted方法 6.2.5 实现 …

【word格式】mathtype公式插入 | 段落嵌入后格式对齐 | 字体大小调整 |空心字体

1. 公式嵌入 推荐在线latex编辑器&#xff0c;可以截图转 latex 识别率很高 https://www.latexlive.com/home 美中不足&#xff0c;不开会员每天只能用3次识别。 通过公式识别后&#xff0c;输出选择align环境&#xff0c;然后在mathtype中直接粘贴latex就可以转好。 2.公式…

java框架-Springboot3-web开发

文章目录 自动配置默认效果WebMvcAutoConfigurationWebMvcConfigurer接口静态资源访问首页Favicon缓存 自定义静态资源路径1、配置方式2、代码方式 路径匹配规则内容协商默认支持json配置支持xml内容协商原理自定义支持ymal 模板引擎模板引擎Thymeleaf整合基础语法遍历判断属性…

成为威胁:网络安全中的动手威胁模拟案例

不断变化的网络威胁形势要求组织为其网络安全团队配备必要的技能来检测、响应和防御恶意攻击。然而&#xff0c;在研究中发现并继续探索的最令人惊讶的事情是&#xff0c;欺骗当前的网络安全防御是多么容易。 防病毒程序建立在庞大的签名数据库之上&#xff0c;只需更改程序内…

ros 接收相机数据数据并发布

完整这个任务不需要用到python3 效果如下所示 环境 ROS1 python2.7 原始环境 无conda 或者conda deactivate 无conda 状态 pip install rospkg pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python4.2.0.3 代码 放在工程目录中 #!/usr/bin/env …

华为云云耀云服务器L实例评测|认识redis未授权访问漏洞 漏洞的部分复现 设置连接密码 redis其他命令学习

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到过MySQL数据库被攻击的情况&#xff0c;数据丢失&#xff0c;还好我有几份备份&#xff0c;没有造成太大的损失。昨天收到华为云的邮箱提醒&#xff0c;我的redis数据库没有设置密码&…

科目三基础四项(一)

​ 第一天&#xff0c;基础操作&#xff0c;仪表&#xff0c;方向&#xff0c;挡位 按照模块来 1、方向盘两手在两侧 ​ 编辑 转向时的角度&#xff0c;只用&#xff1a;向左540&#xff0c;向右180 向左打和向右打的角度要抵消&#xff0c;回正 掉头向左打满再回 注意…

Flink1.14 Source概念入门讲解与源码解析

目录 Flink Source概念 Source Source源码 getBoundedness() createReader(SourceReaderContext readerContext) createEnumerator(SplitEnumeratorContext enumContext) SplitEnumerator restoreEnumerator(SplitEnumeratorContext enumContext, EnumChkT checkpoint) …

工时表软件如何彻底改变时间跟踪工作?

在工作场所&#xff0c;生产率的下降一直在消耗我们的精力和钱包。你知道吗&#xff0c;每年仅生产力倦怠一项&#xff0c;每位员工就会给企业造成 1,967 美元的惊人损失&#xff01; 好消息是&#xff0c;有一种创新的解决方案可以解决这种生产力下降的问题&#xff0c;它就是…