题解-PKUWC2018 随机算法】的更多相关文章

Problem loj2540 题意简述:给定\(n\)个点的无向图,给定求最大独立集的近似算法:随机排列\(1\cdots n\),按照该排列顺序贪心构造最大独立集(即对每个点能加入独立集就加),求算法正确率 \(n\leq 20,m\leq \binom n2\) Solution 暴力枚举应有\(10pts\)(\(n\leq 9)\) 当前状态集合为\(S\),\(0,1,2\)分别表示没访问到.访问到且在最大独立集内.访问到且未在最大独立集内,每次枚举下一个访问的节点,复杂度\(O(n…
点此看题面 大致题意: 用随机算法求一张图的最大独立集:每次随机一个排列,从前到后枚举排列中的点,如果当前点加入点集中依然是独立集,就将当前点加入点集中,最终得到的点集就是最大独立集.求这个随机算法的正确率. 前言 \(PKUWC\)的题目就是妙啊. 题目很神仙,但看完题解后就很简单了,可这种东西像我这般蒟蒻根本想不到啊...... 状压\(DP\) 设\(f_{i,j}\)表示当前已考虑过点集\(i\),最大独立集为\(j\)的方案数. 每次我们枚举一个不在点集中的点\(k\),设与其相邻的点…
题意:https://loj.ac/problem/2540 给定一个图(n<=20),定义一个求最大独立集的随机化算法 产生一个排列,依次加入,能加入就加入 求得到最大独立集的概率 loj2540 「PKUWC 2018」随机算法 本质就是计数题 每个点有三种状态:考虑过且在独立集中,考虑过未在独立集中,未考虑 本来在集合里的点不能知道有哪些,而且不能加入的点的排列也不好确定. 一个好的方法是:把考虑过的点放在一起 然后在加入一个点的时候,把其他不能加入的点都考虑上,并处理方案数. 设f[i]…
题意 有一种贪心求最大独立集的算法: 随机一个排列 按顺序加入独立集,如果一个点能加入,就加入\({S}\) 给出一张图,问得出正确答案的概率. \(n \leq 20\) 传送门 思路 用 \(dp[i][s]\) 表示排列集合为 \(i\),最大独立集的大小为 \(s\) 的方案数,\(a[x]\)表示与\(x\)相连的点集. 考虑加入一个可行点,会使与它相连的所有点不能再加入,这些点的排列顺序无关答案,可以直接将他们随便放到后面的排列中去,即乘上\(A(n-count[i]-1,count…
Problem loj2542 题意:一棵 \(n\) 个结点的树,从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去,询问走完一个集合 \(S\)的期望时间,多组询问 \(n\leq 18,Q\leq 5000\) Solution 首先来个\(min-max\)容斥 一下是看错题时想的 然后预处理从每个点开始的到达每个点的所有集合的期望,\(O(n^22^n)\)卡常可过 若是这样,前20pts可以搞出来了:对于每次询问在线处理dp数组,利用最值容斥搞事情 30pts的部分…
题目分析: 听说这题考场上能被$ O(4^n) $的暴力水过,难不成出题人是毕姥爷? 首先思考一个显而易见的$ O(n^2*2^n) $的暴力DP.一般的DP都是考虑最近的加入了哪个点,然后删除后递归进行状压DP.由于这道题的题目询问方式是反过来的,处理方式也反过来. 令$ f[n][S] $表示当前有$ S $这些点,期望这些点能够构成独立集大小为$ n $.正向的考虑选择了哪个点,并把与这个点有连边的所有点在集合内进行删除,令找到的新状态为$ f[n-1][P] $.我们把$ P $中的结点…
传送门 两种$DP$: ①$f_{i,j}$表示前$i$次选择,最大独立集为$j$时达到最大独立集的方案总数,转移:$a.f_{i,j}+=f_{i+1,j+2^k}$(保证$k$加入后符合条件):$b.f_{i,j}+=f_{i+1,j} \times \text{现在可以放的不影响最大独立集的点的数量}$,这个现在可以放的不影响最大独立集的点的数量就是不可选择的点(即已经选择和与已经选择的点相邻的点)的数量$-i$ 复杂度$O(2^nn^2)$而且似乎无法优化 #include<bits/s…
题目链接 LOJ:https://loj.ac/problem/2540 Solution 写的时候脑子不太清醒码了好长然后时间\(LOJ\)垫底... 反正随便状压\(dp\)一下就好了,设\(f[i][s]\)表示当前用了\(i\)个点,最大独立集为\(s\)的方案数. 每次枚举下次放哪里就好了. #include<bits/stdc++.h> using namespace std; void read(int &x) { x=0;int f=1;char ch=getchar(…
场上数据很水,比较暴力的做法都可以过90分以上,下面说几个做法. 1. 暴力枚举所有最大独立集,对每个独立集分别DP.复杂度玄学,但是由于最大独立集并不多,所以可以拿90. 2. dp[S][k]表示考虑到排列的第k位,当前独立集为S的方案数,枚举第k+1位,根据是否与S相连转移到dp[S][k+1]或dp[S | a[k+1]][k+1].$O(n^22^n)$ 3. dp[S]表示排列的状态为S时的正确率,mx[S]表示排列状态为S时能得到的最大独立集大小,考虑转移,枚举排列里最后一个在独立…
题意 题面 给一个 \(n\) 个点 \(m\) 条边的无向图.考虑如下求独立集的随机算法:随机一个排列并按顺序加点.如果当前点能加入独立集就加入,否则不加入.求该算法能求出最大独立集的概率. \(n\le 20\). Solution 考虑状压DP.按照题意我们按顺序加点,如果该点不能加入独立集,那么这个点可以插在之后排列的某一个位置中. 我们记当前排列独立集中的点的集合和不在独立集中的点的个数为状态,设 \(F(S,i)\) 表示当前独立集点的集合为 \(S\),还有 \(i\) 个点没有插…