给定字符串S为0和1,我们需要将其转换为良好的字符串。当且仅当:
时,字符串称为good没有两个或更多的0或1在一起。这意味着001不好,但010是一个很好的字符串。
现在我们可以交换S的任意两个索引的位置。让位置j与位置j(i≠j)交换的成本为C(i,j)。
现在我们有两种类型的成本计算:
我们需要找到将当前字符串S转换为良好字符串所需的最低交换成本。
此外,如果无法将字符串S转换为良好的字符串,那么我们也需要告诉它,如果S = 00,那么我们永远不能将它转换为良好的字符串。
示例:让字符串S = 0011然后如果成本是类型1,那么我们可以交换任意两个位置和成本| j-i |然后回答是1,并且对于类型2成本也是(3-2)^ 2 = 1
这个问题的DP解决方案可以是| S |< = 10 ^ 5而不是暴力解决方案。请帮助我找到此问题的重复发现,以找到最低成本
答案 0 :(得分:1)
如果我错了,请纠正,但最多可以有两种解决方案。
如果0和1的数量相等,我们有两个解决方案,一个从0开始,另一个从1开始。否则,只有一个解决方案:开始和结束有大量数字。如果计数差异超过1,则无法解决。
对于每种情况,您都可以轻松计算成本。
EG。如果我们需要在0位置交换1,找到下一个立即额外0并与之交换。这个解决方案是您提到的所有3个案例的最佳选择。