1 条题解
-
0
题解
思路
从左到右决定 。
做法
用一个集合 表示下一项当前允许选择的数:起初所有 到 都可选。若本次选择 ,那么在出现 以前不能再次选 ,所以先从 删除 ;另一方面,本次出现的 已满足所有 的等待条件,因此把这些 全部重新加入 。只要求相邻两次出现同一个 之间含有 就足以保证任意两次出现之间也满足条件,故这个状态完整描述了前缀。
用二进制掩码表示 ,预处理每个值 对应的集合 。令
dp[mask]为当前前缀形成该允许集合的方案数,枚举mask中每个可选的 ,转移到(mask 去掉 a) 并上 preimage[a]。完成 次选择后把所有状态的方案数相加。复杂度
时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1565
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者