zoukankan      html  css  js  c++  java
  • 「刷题」小星星

    我很久以前就做过这道题,但是当时没有想出来于是扔掉了(在状压dp那块),今天被学长重新拿出来再讲一次,终于有了点思路。

    先讲一下暴力思路,说是暴力也很难想了。设dp[i][j][s]为以树上编号为i的点为子树,i对应原图的j的,s是i的子树中包含对应原图中的点状态为s的方案数。

    那么写一下式子。

    $ dp[i][j][s]= sum limits_t^{t|s=phi} sum limits_{v,v otin s}^{e(j,v)} sum limits_t^{tin{son[i]}}dp[t][v][t] $

    也就是说枚举s的补集和与j相连的v以及i的儿子t来进行转移,

    时间复杂度是 $ O(3^n n^2) $ 会炸掉。

    关于补集的复杂度是$ 3^n $ 的证明。

    证明:

      设枚举的子集中的元素个数是i,那么这种子集的个数就是$ 2^i $。

      那么:

       $ ans=sum limits_{i=0}^n C_n^k 2^i  $

        $  =sum limits_{i=0}^n C_n^k 2^i 1^n-i $

      由二项式定理得:

       $  ans=(2+1)^n=3^n $

    证毕。

    现在考虑正解,如果我们删去最后一维会怎么样。

    我们无法统计到底是否是一个双全集映射,因为可能有许多点没有被计算入最终的情况,也就是所谓重复的图点出现在树中,虽然连接是合法的,但是集合映射不同。

    考虑大力容斥。

    我们用每个点都在映射范围内的减去有一个不在的,再加上有两个在的,在减去……

    奇加偶减,容斥出结果。

  • 相关阅读:
    sqlite3 学习
    解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法
    HTML基本语法
    linux shell脚本、命令学习
    laravel 缓存相关常用操作
    【扩展推荐】Intervention/image 图片处理
    【Laravel】 常用的artisian命令
    laravel开发调试工具laravel-debugbar的安装
    为PhpStorm添加Laravel 代码智能提示功能
    laravel5.5 安装
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11234363.html
Copyright © 2011-2022 走看看