zoukankan      html  css  js  c++  java
  • AGC021F Trinity【计数,NTT】

    很久没写博客了,诈个尸(

    题目描述:有一个 (n)(m) 列的黑白表格,定义一个映射 (f:{0,1}^{n imes m} ightarrow ({A_n},{B_m},{C_m})),其中 (A_i) 为第 (i) 行第一个黑格的列号(不存在则为 (m+1)),(B_i) 为第 (i) 列第一个黑格的行号(不存在则为 (n+1)),(C_i) 为第 (i) 列最后一个黑格的行号(不存在则为 (0)),求 (f) 的值域大小。

    数据范围:(nle 8000,mle 200)

    我们设 (f_{i,j}) 表示 (i imes j) 的表格中,每行都有数的答案,那么 (Ans=sum_{i=0}^ninom{n}{i}f_{i,j})

    然后考虑dp,若当前列不新增行,那么 (f_{i,j}(1+i+inom{i}{2}) ightarrow f_{i,j+1})

    如果新增行呢?这就是一个很神奇的思路了。考虑 (B_{j+1}-1,C_{j+1}+1) 和新增的 (k) 行共 (k+2) 行,需要在共 (i+k+2) 行中选出来它们的位置,就是 (inom{i+k+2}{i}),综上dp方程就是

    [f_{i,j}=(inom{i+1}{2}+1)f_{i,j-1}+(i+2)!sum_{k=0}^{i-1}frac{f_{k,j-1}}{k!}frac{1}{(i+2-k)!} ]

    使用 NTT 优化,时间复杂度 (O(nmlog n))

    code

  • 相关阅读:
    Xargs
    录制终端会话-script--查找find
    命令之乐-cat
    Linux_shell编程--比较与测试
    线程进程
    计算机网络基础
    python基础-列表相关
    初学Python
    numpy 基本的数组统计方法
    python 操作mysql 入门
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/12589281.html
Copyright © 2011-2022 走看看