zoukankan      html  css  js  c++  java
  • #4863. 矩阵

    #### 题目描述

    有一个 $N$ 行 $M$ 列的矩阵,你可以选择一些位置涂黑,其它位置涂白。

    对一个矩阵,我们计算出一个长度为 $N$ 的序列 $A$ ,以及两个长度为 $M$ 的序列 $B$ 和 $C$ :

    令 $A_i$ 为第 $i$ 行第一次出现黑色的位置的列号,如果第 $i$ 行全白,则为 $M+1$ ;

    令 $B_i$ 为第 $i$ 列第一次出现黑色的位置的行号,如果第 $i$ 列全白,则为 $N+1$ ;

    令 $C_i$ 为第 $i$ 列最后一次出现黑色的位置的行号,如果第 $i$ 列全白,则为 $0$ ;

    请你计算,有多少种不同的 ${A,B,C}$ 三元组可能得到,输出答案对 $998244353$ 取模后的结果。

    #### 数据范围

    $1 leq N leq 8000$,$1 leq M leq 200$ 。

    #### 题解

    为什么有个 $m le 3$ 的部分分。。算了我本来就菜。

    假设我们一开始每个格子都任意染色,那我们考虑什么时候两个染色方案的这三个数组相同。发现当存在一个点,它的左、上、下同时存在黑色格子的话,那这个点去掉后数组不会改变。所以根据这个我们可以进行 $ ext{dp}$ : $f[i][j]$ 表示前 $j$ 列有 $i$ 行有黑色点的方案数,考虑转移到 $f[i+k][j+1]$ 。当 $k=0$ 的时候,就只能加入 $0 sim 2$ 个点,转移显然。当 $k>0$ 的时候,考虑那 $i+k$ 个当中第一个是新插入的在第 $x$ 个,最后一个新插入的从后往前是第 $y$ 个,而第 $x$ 之前和 $y$ 之后分别最多能够重合一个点,所以它的转移系数应当是 $sum_{x=1}^{i+1}sum_{y=1}^{i-x+2}C_{i+k-x-y}^{k-2} imes x imes y$ ,用组合数的性质可以推到这个系数为 $C_{i+k+2}^{k+2}$ 。然后发现这个转移是卷积的形式,所以用 $ ext{Ntt}$ 优化即可。效率: $O(nmlog n)$ 。

  • 相关阅读:
    天气预报APP(2)
    天气预报APP(1)
    android ——网络编程
    android ——Intent
    android ——可折叠式标题栏
    5.1 类,实例,实现,方法
    5.0 面向对象
    python 基础
    模拟实现一个ATM + 购物商城程序
    python 基础
  • 原文地址:https://www.cnblogs.com/xjqxjq/p/13079889.html
Copyright © 2011-2022 走看看