1 条题解
-
0
题解
问题分析
题目要求统计满足特定扫描模式的合法表格数量。扫描模式为:
- 在第 列扫描时,覆盖区域包括:
- 第 列全部 个格子
- 第 列的前 个格子
- 第 列的前 个格子
- ...
- 给定每列的扫描结果 ,求满足所有扫描结果的 表格数量
关键观察
-
扫描区域的递推关系:
- 第 列的扫描区域 = 第 列的扫描区域去掉最后一行的格子 + 第 列的全部格子
- 这形成了相邻列扫描结果之间的约束关系
-
状态设计:
- 使用 DP 状态记录每列各行的矿物情况
- 由于 ,可以用 个变量表示当前列的矿物分布
- 状态转移时考虑相邻列之间的重叠部分
算法思路
动态规划(按列递推):
-
状态表示:
dp[now][a][b][c][d][e][f][g]表示处理到第now列时,各行的"影响值"- 对于 行,第 个状态变量表示扫描区域中来自前 列的矿物数量贡献
-
状态转移:
- 从第
now-1列的状态转移到第now列 - 枚举当前列每行的矿物情况(0或1)
- 计算新的扫描值并检查是否等于
- 更新 DP 状态
- 从第
-
初始化和答案:
- 初始化第一列的所有可能矿物分布
- 最终答案是最后一列满足扫描值等于 的所有状态之和
核心技巧
- 状态压缩:用多个维度的 DP 数组表示各行的累积影响
- 滚动思想:实际代码中按列顺序递推,隐含了滚动数组
- 边界处理:对不同的 值分别处理,避免无效状态
复杂度分析
- 状态数:,但由于 且很多状态不可达,实际可接受
- 转移复杂度: 枚举当前列状态
- 总复杂度:,在给定范围内可行
算法步骤
- 读入 和扫描结果数组
- 根据 值选择对应的 DP 分支
- 初始化第一列的状态
- 按列递推,维护合法的状态数量
- 统计最后一列满足条件的答案
算法标签
- 动态规划
- 状态压缩
- 组合计数
- 递推关系
- 位运算枚举
- 在第 列扫描时,覆盖区域包括:
- 1
信息
- ID
- 3930
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者