「PKUWC2018」随机算法

题意:

有一个n个点的无向图,随机生成一个长度为n的排列,有一个初始为空的集合,按照这个排列遍历,若当前点与当前集合构成独立集,则加入这个点,求最终得到该图最大独立集的概率。
数据范围: n ≤ 20 , m ≤ n ∗ ( n − 1 ) / 2 n \le 20,m \le n*(n-1)/2 n20,mn(n1)/2

题解:

考场:考虑状压DP,但发现朴素地做,使状态能表示独立集的点和排列的点,状态数总不可避免地达到 n 2 × 2 n n^{2} \times 2^{n} n2×2n,转移 O ( n ) O(n) O(n),只有50pts。
正解:因为要求的是最大独立集,故有关最大独立集的状态一定要记,考虑对于不在独立集内但在排列内的点,它们对转移没有影响,即转移时关心的只是每个点是否能被选为独立集内的点。于是记录该状态,再记一维独立集大小,计算方案数,转移时选取一个可选的点,对于这个点的影响,即新增的不可选的点,先乘上它在后面的排列的方案即可(这样做是因为以后就不考虑它们了,而它们也对以后没有影响),这样 O ( n 2 × 2 n ) O(n^{2} \times 2^{n}) O(n2×2n)。又发现对于一个确定的可选方案,它的最大独立集大小是确定的,且只有最大独立集的情况能对后面的产生影响,于是同时DP状态对应的最大独立集大小,可达到 O ( n × 2 n ) O(n\times 2^{n}) O(n×2n)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值