【状压+概率DP】CF678 E

news/2025/1/15 22:59:18/

Problem - E - Codeforces
题意:

思路:

首先,n <= 18,应当想到状压

很明显,这里可以使用状压DP

设 dp[s][i] 表示,现在选的方案为 s ,且我是 i 的最终胜利的概率是多少

重要的是转移

这是很经典的状压DP转移方式:选择两个1,然后转移

有两种情况,j 战胜 k 或 k 战胜 j 

根据这两种情况乘一下概率即可

概率DP就是看当前状态从哪些状态转移过来,边权就是概率,加一下就好了

然后答案就是枚举一下我是哪个就好了

一切都是典中典

Code:

#include <bits/stdc++.h>#define int long longusing i64 = long long;constexpr int N = 1e2 + 10;
constexpr int M = 1e2 + 10;
constexpr int P = 2e2 + 10;
constexpr i64 Inf = 1e18;
constexpr int mod = 1e9 + 7;
constexpr double eps = 1e-6;int n;
double p[20][20];
double dp[(1 << 19)][20];void solve() {std::cin >> n;for (int i = 0; i < n; i ++) {for (int j = 0; j < n; j ++) {std::cin >> p[i][j];}}if (n == 1) {std::cout << std::fixed << std::setprecision(8) << 1.0 << "\n";return;}dp[1][0] = 1.0;for (int s = 0; s < (1 << n); s ++) {for (int j = 0; j < n; j ++) {if (((s >> j) & 1) == 0) continue;for (int k = 0; k < n; k ++) {if (((s >> k) & 1) == 0) continue;dp[s][j] = std::max(dp[s][j], p[j][k] * dp[s - (1 << k)][j] + p[k][j] * dp[s - (1 << j)][k]); }}}double ans = 0;for (int j = 0; j < n; j ++) {ans = std::max(ans, dp[(1 << n) - 1][j]);}std::cout << std::fixed << std::setprecision(8) << ans << "\n";
}
signed main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t = 1;while (t--) {solve();}return 0;
}


http://www.ppmy.cn/news/1073816.html

相关文章

c++学习之vector的实现

在学习实现vector之前我们会看到对于库中的vector的实现&#xff0c;这里并非使用在学习string那样的定义方式&#xff0c;而是利用迭代器&#xff0c;也就是指针来实现的&#xff0c;这在功能的实现时极大的方便了我们。 那么我们就模仿库这样的方式实现我们呢经常会用到的一些…

Django静态文件媒体文件文件上传

文章目录 一、静态文件和媒体文件1.在django中使用静态文件实践2.在django中使用媒体文件 二、文件上传单文件上传实践多文件上传 一、静态文件和媒体文件 媒体文件: 用户上传的文件&#xff0c;叫做media 静态文件:存放在服务器的css,js,image,font等 叫做static1.在django中…

docker好难用啊!为啥说它移植性好?

刚刚接触docker&#xff0c;真的好麻烦啊&#xff0c;不明白为什么要选择docker&#xff0c;我都搞了两天还在搭环境&#xff0c;又告诉我Windows版本过低不适配docker&#xff0c;转而在Ubuntu里装docker&#xff0c;然后MySQL、php、Nginx又得重新装一遍。。。好麻烦啊 1 用…

【Spring Data JPA】JPA 常用查询函数

文章目录 前言函数查询表格 前言 函数查询的表格参考了官网的 2.7.3 版本的文档&#xff0c;JPA 的这种函数式查询方法改动不大&#xff0c;如果想知道更多的复杂查询&#xff0c;可以参考这篇文章 【Spring Data JPA】基于 JpaRepository 增删改查 官方文档地址 Spring Data…

spring中LocalDateTime 转成字符串的时候注意事项

ApiOperation("查询课程发布信息") ResponseBody GetMapping("/r/coursepublish/{courseId}") public CoursePublish getCoursepublish(PathVariable("courseId") Long courseId) { CoursePublish coursePublish coursePublishService.getC…

自用Eclipse配置记录

喜欢用eclipse写代码&#xff0c;由于现在的eclipse配置导出的功能缺失较多。这里开一帖把本人常用的配置记录一番&#xff0c;省得再到处找。 另&#xff1a;工作空间中有个.metadata 目录保存了相关的插件及配置&#xff0c;可以复制到其他空工作间中复用配置。 设置工作空间…

linux 发行版中在容器内访问热插拔 U 盘的分区内容

前言 在 UOS 如何实现自动将 U 盘挂载到指定目录中&#xff1f;这篇文章中&#xff0c;我描述了 UOS 自动挂载 U 盘到指定目录的方式&#xff0c;现有的发行版处理逻辑大致相同。 当挂载位置确定后&#xff0c;容器内的业务逻辑要访问 U 盘分区中的内容&#xff0c;看上去只需…

C++学习记录——삼십 智能指针

文章目录 1、为什么需要智能指针&#xff1f;2、内存泄漏3、智能指针的使用及原理1、RAII思想2、拷贝问题1、unique_ptr2、shared_ptr1、多线程2、循环引用3、定制删除器 1、为什么需要智能指针&#xff1f; 看一个场景 int div() {int a, b;cin >> a >> b;if (b…