【每日一题】32. 比赛 (DFS / 概率DP)
补题链接:Here
【方案一:DFS】
首先我们可以计算出每道题做不出来的概率 \(unsolve[i] = (1 - a[i])(1- b[i])(1 - c[i])\)
然后因为只有 12 道题, 每道题要么做对要么做错, 我们可以做 \(DFS\)
当前做对的题数小于 \(need\) 的时候, 我们可以往对和不对的方向搜索
如果做对的题数等于 \(need\) , 那么我们只能往不对的方向搜索
const int N = 110;
double a[N], b[N], c[N];
double unsolve[N];
double ans;
void dfs(int pos, int now, int need, double p) {
if (pos == 13) {
if (now == need) ans += p;
return ;
}
if (now < need)dfs(pos + 1, now + 1, need, p * (1 - unsolve[pos]));
dfs(pos + 1, now , need, p * unsolve[pos]);
}
void solve() {
for (int i = 1; i <= 12; ++i)cin >> a[i];
for (int i = 1; i <= 12; ++i)cin >> b[i];
for (int i = 1; i <= 12; ++i)cin >> c[i];
for (int i = 1; i <= 12; ++i)
unsolve[i] = (1 - a[i]) * (1 - b[i]) * (1 - c[i]);
for (int i = 1; i <= 13; ++i) {
ans = 0;
dfs(1, 0, i - 1, 1);
cout << fixed << setprecision(6) << ans << "\n";
}
}
【方案二:概率 \(dp\) 】
这道题还可以用概率 \(dp\) 来做
令 \(dp[i][j]\) 表示做到第 ii 道题的时候做对 jj 道的状态
显然有 \(dp[i][j] = dp[i - 1][j] * unsolve[i] + dp[i - 1][j - 1] * (1 - unsolve[i])\)
注意初始化 \(dp[0][0] = 1\)
const int N = 105 + 5;
double a[N], b[N], c[N];
double unsolve[N];
double dp[15][15];
void solve() {
for (int i = 1; i <= 12; ++i)cin >> a[i];
for (int i = 1; i <= 12; ++i)cin >> b[i];
for (int i = 1; i <= 12; ++i)cin >> c[i];
for (int i = 1; i <= 12; ++i)
unsolve[i] = (1 - a[i]) * (1 - b[i]) * (1 - c[i]);
dp[0][0] = 1;
for (int i = 1; i <= 12; ++i) {
dp[i][0] = dp[i - 1][0] * unsolve[i];
for (int j = 1; j <= i; ++j)
dp[i][j] = dp[i - 1][j] * unsolve[i] + dp[i - 1][j - 1] * (1 - unsolve[i]);
}
for (int i = 0; i <= 12; ++i)
cout << fixed << setprecision(6) << dp[12][i] << "\n";
}
【每日一题】32. 比赛 (DFS / 概率DP)的更多相关文章
- 【每日一题】【DFS+存已加的值】2022年2月27日-二叉树根节点到叶子节点的所有路径和
描述给定一个二叉树的根节点root,该树的节点值都在数字0−9 之间,每一条从根节点到叶子节点的路径都可以用一个数字表示.1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是 ...
- 【每日一题】【DFS和回溯的区别】【BFS】104. 二叉树的最大深度-211227/220218
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,null,15,7], ...
- 【每日一题】【DFS&每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...
- 【每日一题】【DFS】2022年1月5日-543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过也可能不穿过根结点. 答案: /** * Definition for a binary ...
- 【每日一题】【DFS/回溯】2022年1月1日-113. 路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径. 叶子节点 是指没有子节点的节点. 来源:力扣(LeetCode)链接 ...
- 【每日一题】【DFS】【BFS】【队列】2021年12月5日-199. 二叉树的右视图
解答: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...
- 【每日一题】【dfs重载原始函数&循环/函数结束条件&左右下标在数组中位置的确定】2022年2月7日-NC12 由先序和中序遍历重建二叉树
描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建 ...
- [转]概率DP总结 by kuangbin
概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...
- HDU 3366 Passage (概率DP)
题意:T组测试数据,一个人困在了城堡中,有n个通道,m百万money ,每个通道能直接逃出去的概率为 P[i] ,遇到士兵的概率为 q[i], 遇到士兵得给1百万money,否则会被杀掉,还有 1-p ...
- 【JavaScript】【dp】Leetcode每日一题-解码方法
[JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...
随机推荐
- Proj4:改进LiteOS中物理内存分配算法
Proj4:改进LiteOS中物理内存分配算法 实验目的 掌握LiteOS系统调用的自定义方法 实验环境 Ubantu和IMX6ULL mini 实验内容 (从代码角度详细描述实验的步骤和过程) 原先 ...
- 你真的了解HashSet 和HashMap的区别、优缺点、使用场景吗?
HashSet 和 HashMap 是 Java 集合框架中的两个常用类,它们都用于存储和管理数据,但在使用方式.功能和性能上有很大的区别. HashSet 和 HashMap 的区别 区别一:用途不 ...
- [计蒜客20191103B] 饮料
小 B 出门游玩,他现在走到了 \(n\) 家饮品店前,第 \(i\) 家买饮料的花费为$ cost_i$ ,他只能去花费不超过自己所带钱数额的店,但他现在不确定自己兜里有多少钱,所以现在给出 \(m ...
- cocos2d-Js 各类碰撞检测
这里总结一下点.圆.矩形之间的简单碰撞检测算法(矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半径 isCollision: function(p ...
- IDEA在new对象的时候不显示其parameter
问题现象 最近安装了一个IDEA2023.1版本,出现了new对象不显示相关构造参数 解决办法 在IDEA的设置中开启相关提示 勾选上面的几个设置,保存 效果
- Google Guava提供的特殊的Table集合
1.Table 是个啥? 是一个特殊的映射,其中两个键可以在组合的方式被指定为单个值.它类似于创建映射的映射. 当你想使用多个键做索引的时候,你可能会用类似 Map<rowKey, Map< ...
- ElasticSearch Groovy 沙盒绕过 && 代码执行漏洞
漏洞编号:CVE-2015-1427 漏洞详情 CVE编号 CVE-2015-1427 漏洞级别 高危7.5 标题 Elasticsearch Groovy 脚本引擎存在远程代码执行漏洞 披露时间 2 ...
- 【内核】kernel 热升级-1:kexec 机制
内核热升级是指,预先准备好需要升级的内核镜像文件,在秒级时间内,完成内核切换,追求用户服务进程无感知. 欧拉操作系统提供了一套比较成熟的解决方案,该解决方案提供了用户态程序和内核态程序两部分: kex ...
- 在arm架构的银河麒麟系统部署Redis
以下是在arm架构的银河麒麟系统上部署Redis的详细步骤: 1. 创建文件夹 首先,在合适的位置创建必要的文件夹.在本例中,我们将创建/opt/redis和/usr/src/redis两个文件夹. ...
- nginx-下载安装与配置
nginx下载 从官网下载,使用命令在linux下载即可,这个是目前稳定版最新的1.24.0版本,如果想要用旧版本直接修改版本号即可(旧版本我用的是1.12.2) 下载需要使用wget命令,默认是没有 ...