1 条题解
-
0
题解
思路
交换不会改变零和一的数量。设零的数量为 、一的数量为 ,则任意两个不同字符构成的下标对恰好属于
01或10,总数为 。平衡目标因此要求两类各有 个;题目保证该值为整数且可达。任意目标串与原串中不同的位置数必为偶数。每次交换一个错放的零和一个错放的一,恰好修正两个位置,所以到某个目标串的最少交换次数是汉明距离的一半。
做法
从左到右构造目标串。设已经放置了 个一,并已经产生 个
01对。若当前位置放零, 不变;若放一,它与前面所有 个零各形成一个01对,故 增加 。转移代价是新字符是否与原字符不同。最终要求恰好放置 个一且 。DP 最小代价除以二即为答案。
时可以枚举所有保留零一数量的目标串;若输入本身平衡,答案直接为零。
正确性说明
DP 的两个计数分别完整记录目标串一的数量与
01数量,每个位置恰好选择零或一,因此它枚举了所有零一数量不变的目标串。终态约束又恰好等价于平衡。DP 代价等于目标串与原串的汉明距离,而同数量二进制串之间的最少任意交换次数恰为汉明距离的一半。因此 DP 终态的最小代价除以二就是最少操作数。复杂度
时间复杂度为 的状态上界写法;利用位置限制后的实际状态数为 ,在 时至多约 次转移。空间复杂度为 。
- 1
信息
- ID
- 1404
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者