1 条题解
-
0
Tiles 题解
思路
设当前一行有 块瓷砖,到达各块瓷砖的方案数为 。
当下一行增加一块瓷砖时,杨辉三角关系给出新状态 ,越界项视为零;当下一行减少一块瓷砖时,。小规模可以完全按照这个关系逐行模拟。
考虑一次完整的“增加 行、减少 行”。若组前位置为 ,组后位置为 ,在中间最宽处枚举位置 ,路径数为
把第二个组合数的下标取补集并使用范德蒙德卷积,可得
$$\sum_x {a\choose x-k}{b\choose x-j}={a+b\choose b+j-k}.$$因此一组变化后的动态规划为
由于 ,处理完前 组后的行宽至多为 。第二子任务可以对 二重枚举,直接计算上式。
满分算法把上式视为卷积。旧行宽为 ,新行宽为 ,定义
则普通卷积 的第 项恰好等于 。模数 支持 NTT,每组做一次卷积即可。
做法
读入全部 ,预处理阶乘与逆阶乘直到 ,从而在 时间求组合数。
初始状态只有一项 。依次处理每一组:根据当前宽度和 算出新宽度,构造所需范围内的组合数核 ,进行 NTT 卷积,并截取下标从 开始的连续 项作为新状态。全部处理后将最后状态的所有项求和。
独立满分复核程序使用另一套位逆序和蝶形实现;中档复核程序直接做二重循环;小档复核程序逐行模拟杨辉转移。
复杂度
设道路最大行宽为 ,总行数变化量为 。逐行模拟的时间复杂度为 ,空间复杂度为 。
直接组转移的时间复杂度为 ,在 下可写为 ;空间复杂度为 。
NTT 算法的时间复杂度为 $O(nW\log W+\max(a_i+b_i))=O(n^2\log n+\max(a_i+b_i))$,空间复杂度为 。
- 1
信息
- ID
- 1266
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者