穷举
- 找到一个能够穷举的有限集合,适当的去掉一些没必要的项,完成穷举
- 熄灯问题:找到一种开关组合使灯全部熄灭
分析:
有限集:一个开关只有01两态,循环n次即可
直接:穷举所有开关状态(0或1),量太大
优化:根据题意,当第一行(列)开关确定后,为了使最终符合结果,那么下一行的开关也就唯一确定了(为了使上一行全熄灭)。
因此只需要穷举第一行的所有状态,确定所有开关的状态后,判断最后一行灯的状态是否符合结果即可。
空间优化:因为灯和开关都只有两个状态(0或1),所有只要用一个bit即可。那么对一行状态只要用一个int来枚举即可,处理时通过获取int的某个二进制位来实现。 - 特殊密码锁:熄灯变形http://cxsjsxmooc.openjudge.cn/2017t2summerw1/a/
分析:
有限集:一个开关只有两个状态
优化:当该位不一致时,需要按下一位开关使其符合。因此,依次得到所有开关状态后只要判断最后一位的结果是否符合就可以了。
难点:当第一位就不同时有两种选择(1按1号开关,2按下一号开关)。因此,对每一个问题都做两次判断,得到最小结果。 - 拨钟问题:熄灯问题的变形http://cxsjsxmooc.openjudge.cn/2017t2summerw1/b/
分析:
有限集:每个开关有四种状态,且只有9个开关(对应9个钟),直接9重循环
优化:在第一行确定的情况下,其他的就确定够了,判断最后结果是否符合即可。