kzoacn吧 关注:9贴子:250
  • 9回复贴,共1
dp小结


IP属地:上海1楼2016-12-02 23:27回复
    CF736C
    给定一棵树,将点黑白染色,使得每个点u距离不超过k的点v中存在至少一个黑点, n<=100 k<=20
    dp[u][a][b]表示以u为根的子树、最深的未覆盖点深度为a,最浅的黑点为b a=0表示都被覆盖 b=k+2表示没有染黑点
    转移考虑每次向一个树上连接一颗子树 枚举原树的a,b 子树的c,d 合并即可
    复杂度O(nk^4)
    思路可能是这样来的
    首先有树dp的 dp[u] ,然后考虑从子结点转移发现需要记录未染色点、再考虑子树间的相互影响,发现需要记录黑点
    [每次并上一棵子树是关键]
    思想上考虑加法原理的DAG可以对一个东西找它的前驱、或者推它的后缀
    一个考虑我是怎么来的 另一个考虑我能传给谁
    某ASC题
    求一个n个点的树、满足父节点编号大于子节点、父节点的儿子个数大于等于子节点的儿子个数
    f[i][j][k] 表示siz大小为i,有j个儿子,儿子的儿子个数<=k 的方案数
    g[i][j] 表示siz大小为i,节点儿子个数<=j的合法方案数
    转移考虑枚举除父节点外次大点所在子树大小i'
    f[i][j][k] = \sum g[i'][k]*f[i-i'][j-1][k]*C(i-2,i'-1)
    组合数是在未确定归属的i-2个编号中选i'-1个的方案数
    复杂度O(n^4)


    IP属地:上海2楼2016-12-02 23:27
    回复
      Bipartite Bicolored Graphs
      求n个点的带标号二分图,且边二染色的方案数
      n<=100
      倒着考虑
      如果能求出n个点合法连通二分图个数f[n]
      那么答案h[n]就可以通过枚举一号点所在块的大小得出
      考虑求f[n]
      定义g[n]为求n个点的带标号二分图,g[n]=\sum_i C_{n-1,i-1}3^i,注意到有m个连通块的图会被统计2^{m-1}次
      容斥一下
      f[n]=g[n]-\sum_{i<n}f[i]*g[n-i]*C_{n-1,i-1}*2


      IP属地:上海3楼2016-12-05 10:08
      回复
        好强啊


        IP属地:山东5楼2016-12-20 20:27
        收起回复
          好强啊


          IP属地:美国来自iPhone客户端6楼2020-08-02 10:35
          收起回复