枚举的基本条件:
(1)时间条件:
首先是时间条件。一般来说主流的OJ当中,1000ms的时间限制下可以运行操作数为10^7以内的运算(通常10^6以内较为保险),所以在采用枚举方法之前最好看一下数据范围,确保整个程序的执行操作数不会超过10^6-10^7这个量级,如果超过了就尝试更换枚举的维度或者使用其他算法吧。
(2)编程上的实现条件:
其次是编程上的实现条件。在编程实现上,一般来说暴力枚举需要两个条件,一是枚举的范围一般需要连续,如果枚举范围是离散的,那么一般很难使用for循环枚举出所有状态,也就不能保证解的完整性(不过有些时候数据看似离散,但实际上可以经过处理变得连续)。第二个条件是枚举内容需要已知,不能在枚举到某个地方的时候出现未知(不过这个一般都被满足)。
解题思路
(1)找到枚举变量(尽量由已知推未知)
(2)找到并尽量缩小范围(根据题意但无需太过精确,可以过大,条件在if中判断即可)
(3)依据题意进行操作(尽量剪枝)
目录
一、P2241 统计方形
易得:
子矩形构成的矩阵的长宽是由原矩形长宽减去不同数而得,即(n-b)*(m-a) (a≠b)
子正方形构成的矩阵的长宽由原矩形长宽减去相同数而得,即(n-b)*(m-a) (a=b)