题目描述 有 $n$ 个箱子,每个箱子里有且仅有一把钥匙,每个箱子有且仅有一把钥匙可以将其打开.现在随机打开 $m$ 个箱子,求能够将所有箱子打开的概率. 题解 组合数学+概率dp 题目约定了每个点的入度和出度均为1,因此最终的图一定是若干个环.每个环都至少选择一个点即可满足要求. 预处理出每个环的点数 $c[i]$ 以及其后缀和 $sum[i]$ . 设 $f[i][j]$ 表示前 $i$ 个环中选出 $j$ 个点,满足最终条件的概率.初始化 $f[0][0]=1$ . 枚举 $i$ 和前 $…
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它们打开.崔克茜想知道最后所有盒子都被打开的概率,你能帮助她回答这个问题吗? 输入 第一行一个整数 T (T ≤ 100)表示数据组数. 对于每组数据,第一行有两个整数 n 和 k (1 ≤ n ≤ 300, 0 ≤ k ≤ n). 第二行有 n 个整数 ai,表示第 i 个盒子中,装有可以打开第 a…
Description 题面:www.lydsy.com/JudgeOnline/upload/task.pdf Input Output 一般概率题有两种套路: 满足条件的方案/总方案. 直接求概率. 第一种方法比较好理解,这道题这么做的话也非常简单.这里讲一下第二种方法: 易得箱子之间都是环的关系,令 $f[i][j]$ 表示一共开了 $j$ 个箱子并成功打开前 $i$ 个环的概率.  则 $f[i][j+p]+=\frac{f[i-1][j]\times C^{j}_{sum[i-1]}\…
www.lydsy.com/JudgeOnline/upload/task.pdf 第一题题意可以转为选一个长度k的序列,每一项二进制的1的位置被下一项包含,且总和为1,考虑每个二进制位的出现位置,可以转化为一个多重背包求方案数的问题. 第二题构成一些环,可以每个环直接计算,然后合并答案. 第三题区间包含相当于单向边,区间相交不包含就是双向边,将区间相交不包含的情况缩点,剩余的单向边构成一棵树(几个被缩起来的区间可以用它们的并集表示),用lct维护树形态,查询即为询问两点是否是祖先关系,对于修改…
比较显然 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int T,n,K,vis[305],a[305],b[305]; double C[305][305],F[305][305]; int main(){ scanf("%d",&T); C[0][0]=1; for (int i=1; i<=300; i++){ C[i][0…
hihocoder1075[开锁魔法] 题意是给你一个 \(1-n\) 的置换,求选 \(k\) 个可以遍历所有点的概率. 题目可以换个模型:有 \(n\) 个球,有 \(cnt\) 种不同的颜色,求选出 \(k\) 个球包含所有颜色的概率. 根据概率的定义,我们只需求出合法的方案数即可. 设 \(f[i][j]\) 表示选 \(j\) 个球,包含前 \(i\) 种颜色的方案数.转移枚举第 \(i\) 种颜色选的个数即可. 根据乘法原理和加法原理可得: \[f[i+1][j+use]+=f[i]…
解题思路:从1到n的倒数之和. #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main(){ int n; while(scanf("%d",&n)!=EOF){ double ans=0; for(int i=1;i<=n;i++){ ans+=(1.0/i); } printf("%.4lf\n"…
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它们打开.崔克茜想知道最后所有盒子都被打开的概率,你能帮助她回答这个问题吗? 解题报告: 用时:20min,1A 我们按\(i\)到\(ai\)连边发现,在同一环内的我们选取任意一个即可 所以我们统计这样的连通子图的个数\(m\),即每一个子图的节点数,所以我们只要保证每一个子图至少选到一个即可,所以…
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它们打开.崔克茜想知道最后所有盒子都被打开的概率,你能帮助她回答这个问题吗? 输入 第一行一个整数 T (T ≤ 100)表示数据组数. 对于每组数据,第一行有两个整数 n 和 k (1 ≤ n ≤ 300, 0 ≤ k ≤ n). 第二行有 n 个整数 ai,表示第 i 个盒子中,装有可以打开第 a…
Problem Statement 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它们打开.崔克茜想知道最后所有盒子都被打开的概率,你能帮助她回答这个问题吗? 输入 第一行一个整数$T$ ($T \leq 100$)表示数据组数. 对于每组数据,第一行有两个整数$n$和$k$ ($1 \leq n \leq 300, 0 \leq k \leq …