翻转问题(开关,开灯问题)求解技巧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转问题(开关,开灯问题)求解技巧相关的知识,希望对你有一定的参考价值。

转载自:http://blog.csdn.net/ac_hell/article/details/51077320

 

翻转问题技巧详解

例.给定一个01串,现有翻转规则:翻转某一个位置时其后面2个位置也会跟着翻转,也就是每次翻转都会翻转3个连续的位置。要将01串全部翻转为0,求最小的翻转次数

形似这类题的问题叫做翻转问题,也可以叫开关问题,对于这类题通常都会用到下面我要说的方法来解


①.若某一个位置被翻转了n次,则其实际上被翻转了n%2次,因为翻转2k次相当与没翻转,翻转2k+1次相当于翻转了1次,因为要求最小翻转次数,所以对于某一个位置要么只(主动)翻转一次,要么不(主动)翻转。

②.分析易知翻转的顺序并不影响最终结果。(理解不了可自己举个例子在纸上模拟下)

③.现在我们着眼于第1个位置,可知若要将第1个位置进行翻转只有翻转它自己,因为没有其他位置的翻转会引起它的翻转。由①可知若第1个位置为1则必须且进行翻转(并将其后2个进行连带翻转)且以后不再进行翻转,因为再进行翻转就一共翻转了2次相当于没翻转。然后着眼于第2个位置,由于第1个位置不再进行翻转,所以要想翻转第2个位置只有翻转它自己,因为没有其他位置的翻转会引起它的翻转.....................以此类推直至最后剩下的个数<3个,因为每次都翻转3个,而剩下的少于3个了就不再进行考虑了,此时只需判断剩下的是否全为0的即可,若不全为0,则不存在全部翻转为0的方案


下面奉上几个题,当然赤裸裸套用上面方法是行不通的,在此基础上还需用到其他技巧

POJ-3276(翻转问题+二分搜索)

POJ-3279(翻转问题+位操作)

POJ-1753(和3279没啥区别!)

POJ-2965

题解报告请在我的分类-常用技巧精选中找一下吧!



以上是关于翻转问题(开关,开灯问题)求解技巧的主要内容,如果未能解决你的问题,请参考以下文章

poj1830(求解xor方程组)

Java 求解翻转链表

Java 求解翻转二叉树

Java 求解K 个一组翻转链表

数据结构与算法之深入解析“K个一组翻转链表”的求解思路与算法示例

2022-05-25:最大子段和是 一个经典问题,即对于一个数组找出其和最大的子数组。 现在允许你在求解该问题之前翻转这个数組的连续一段, 如翻转(1,2,3,4,5,6)的第三个到第五个元素組成的子