zoukankan      html  css  js  c++  java
  • [PKUWC2018]随机算法

    题意:https://loj.ac/problem/2540

    给定一个图(n<=20),定义一个求最大独立集的随机化算法

    产生一个排列,依次加入,能加入就加入

    求得到最大独立集的概率

    loj2540 「PKUWC 2018」随机算法

    本质就是计数题

    每个点有三种状态:考虑过且在独立集中,考虑过未在独立集中,未考虑

    本来在集合里的点不能知道有哪些,而且不能加入的点的排列也不好确定。

    一个好的方法是:把考虑过的点放在一起

    然后在加入一个点的时候,把其他不能加入的点都考虑上,并处理方案数。

    设f[i][S]表示,独立集大小为i,不能再选择的点集合是S的方案数

    每次选择一个能加入的点j,然后更新能选择的集合和集合大小,顺便处理排除掉的点的方案数

    就是一个排列,其实就是把后面尚未考虑的位置加入一下,

    注意这里不用考虑j的位置,j位置钦定为从前往后第一个能选择的位置

    i从n往下找到第一个方案数不是0的f[k][全集]

    最后乘上n!的逆元即可

    O(n^2*2^n)传说可过

    对于不可以选择的集合S,对应的最大独立集确定

    mxS记录S集合最大独立集

    所以类似最短路条数,mxS更新的时候,把方案数设成0

    这样也能求出最大独立集方案数。

    O(n*2^n)

    思路有点类似某次模拟赛T3,我在加入一个数的时候,就把能产生的贡献和影响都计算上

    因为只有在枚举这个转移的时候才知道加入的哪个点,这样不用考虑加入进去的点都是谁了。

    也方便处理不能选择的那些点的排列。

    (有了第二种做法,一般的20个点的最大独立集也可以做了,20个点的最大独立集方案数也可以求)

  • 相关阅读:
    Radmin01-如何使用Radmin进行云服务器的远程连接与文件传输?
    vmware-workstation迁移虚拟机 15pro到12版本
    爬格子呀5-10
    爬格子呀--IEEE极限编程大赛留念
    爬格子呀5-8
    爬格子呀5-7
    爬格子呀5-6
    爬格子呀5-5
    爬格子呀5-4
    爬格子呀5-3
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10212265.html
Copyright © 2011-2022 走看看