题解:AT_abc391_e [ABC391E] Hierarchical Majority Vote
更好的阅读体验
建议难度:
题目大意
定一个长度为
解题思路
-
操作过程: 每次操作都将字符串分成每
3 个字符为一组,对每组的3 个字符取多数值:如果大于等于2 个字符是1,则该组的值为1,否则为0。每次操作都会使得字符串的长度缩小为原来的三分之一。 -
目标: 我们最终希望通过最少的位变化,将经过
N 次操作后得到的字符串的结果从当前值变为相反的值。 -
步骤:
- 模拟操作:
从输入字符串
A 开始,反复执行N 次操作,得到最终的一个字符。 - 计算最小改变次数: 对于每次操作,我们需要计算在将字符串压缩的过程中,最少需要改变多少个位来改变最终结果。
- 模拟操作:
从输入字符串
-
数据结构: 使用一个结构体
ST来存储每个字符变为0和变为1的代价。然后,通过动态规划的方式,逐步计算出最少的改变次数。
动态规划思路
通过动态规划,我们逐步压缩字符串,计算每次压缩的代价,并最终得出最少修改次数。每一步的状态转移考虑当前字符的变换代价,以确保最小化最终的修改次数。
-
状态定义: 对于每个子串(每
3 个字符),我们需要知道将其压缩成0或1的代价。这个代价的计算基于每个字符变为0或1的代价。 -
操作过程:
- 每次操作都将字符串的长度缩小为原来的三分之一,每
3 个字符会根据多数值生成新的字符。 - 我们计算每组字符(
3 个字符)压缩为0或1的代价。我们希望通过最少的改变次数,决定当前字符的转换方式。
- 每次操作都将字符串的长度缩小为原来的三分之一,每
-
转移方程: 对于每组
3 个字符,我们可以遍历每种可能的组合(变为0或1),然后选择使得多数值符合目标的最小代价。最终,动态规划状态会记录每个位置的最小代价。 -
最小改变次数: 每次操作后,通过动态规划更新状态,并计算最小改变次数。最终,我们得到将字符串最终值从当前的
0或1转换为目标值的最小操作次数。 -
结果计算: 完成
N 次操作后,通过动态规划数组中存储的代价,计算最少修改次数,得出最终结果。
时间复杂度
每次操作都会将字符串的长度减少为原来的三分之一。每次对
link