专栏文章

UVA1052 Bit Compressor 题解

UVA1052题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min3r9jt
此快照首次捕获于
2025/12/01 20:05
3 个月前
此快照最后确认于
2025/12/01 20:05
3 个月前
查看原文
首先设 s|s| 表示字符串 ss 的长度,因为原串 dd 的长度为 ll11 的个数为 nn,那么 00 的个数即为 lnl - n,因为压缩之后 00 的个数只会变多或者不变,不可能变少,因此 lnsl - n \le |s|,否则无解。
接下来想怎么动态规划,设 dpi,t0,t1dp_{i,t_0,t_1} 表示把从 11 往后的位置还原到原串,即原串可以压缩为 s[i,s)s[i,|s|),包含 t0t_000t1t_111 的方案数,那么最后的答案即为 dp0,ln,ndp_{0,l-n,n},我们只要知道答案与 0011 的大小关系即可,即判断可行性即可,不需要知道具体答案。考虑如何转移
分类讨论。如果 sis_i00,那么原串一定为 00,答案为 dpi+1,t01,t1dp_{i+1,t_0-1,t_1};如果 sis_i11,那么可能与后面的数字构成一个整体,但最后一个位置的下一个一定要为 00,否则构成的原串不合法,答案为 p=2idpi+p,t0,t1x\sum_{p = 2}^i dp_{i + p,t_0,t_1 - x}
空间可以优化,我们发现只要存四个数字即可,00 表示无解,11 表示一个解,22 表示多个解,33 表示还未计算,那么我们只需要两个二进制位就能表示值,那么一个整形可以存储十六个值,空间为原来的 116\frac{1}{16}。还有一种方法,用一个映射来存储值,因为有很多位置是冗余的,没必要全部用上,因此只要存必要的即可。两种方法均可。

评论

0 条评论,欢迎与作者交流。

正在加载评论...