一、算法思想
列举出所有可能的情况,逐个判断哪些符合问题的要求,从而得到问题的全部解答。
穷举法的关键问题:确定穷举范围、确定判断条件。
二、入门
1、百鸡问题
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
三、例题
1、生理周期
http://poj.org/problem?id=1006
思路:
(1)输入四个整数:d1,d2,d3和d。p,e,i分别表示第一次体力、情感和智力高峰出现的时间(即距当年第一天的天数,如:0表示当年第一天,1表示当年第2天……)。d是给定的时间,可能小于d1,d2,d3。
2、假币问题
http://poj.org/problem?id=1013
思路:
(1)12枚硬币real[12],标志着如果是even时,它们都标志为true
(2)flag[12]当up时,左边的++,右边的--
(3)当down时,左边的--,右边的++
(4)当real=true的时候必定为真币,其他的偏离值越大,它就是假的
3、完美立方
http://poj.org/problem?id=1543
思路:直接暴力吧
4、画家问题
http://poj.org/problem?id=1681
思路:
(1)我们按照从上到下、从左到右的顺序确定需要粉刷的砖块。
(2)考虑相邻两行间的相互影响,下一行的每一格只能影响上一行正对的一格。因此,当上一行的粉刷方案确定后,下一行的粉刷方案也随之确定。
例如:
第一行粉刷后墙壁状态如上左图显示,则粉刷第二行时,为了使第一行都变成黄色,必须粉刷第1、3、4、7格,粉刷后如上右图所示。
总的算法是枚举第一行的粉刷方案,然后用上述方法依次确定下面各行的粉刷方案。在由于第k行的粉刷方案保证第k-1行为黄色。n行全部完成后,只需检查第n行是否全为黄色,就可以判断这种方案是否合法。
用一个bool数组map[n][n]表示整个墙壁的状态,map[i][j]=true表示第i行,j列为白色
代码: