暴力枚举与打表

【暴力枚举】

枚举,就是将所有情况都举出,并判断其是否符合题目条件。其基本方法是分析题意后,找到一个合适的维度列举每一个元素,以完成题目。

一般主流的 OJ 中,1000ms 的时间限制下可以运行操作数为 10^7 以内的运算(10^6 以内较保险),所以在采用枚举方法之前最好看一下数据范围,确保整个程序的执行操作数不会超过 10^6~10^7 量级。

在编程实现上,暴力枚举需要两个条件,一是枚举的范围要连续,如果枚举范围是离散的,那么一般很难使用 for 循环枚举出所有状态,也就不能保证解的完整性(有时数据看似离散,但实际上可通过预处理使其连续);二是枚举内容需要已知,不能在枚举到某个地方的时候出现未知。

【打表】

有时需要对某个范围内的数据进行判断,判断它是否符合某种条件,然后在接下来的很多次数据中,可能会反复使用到这些判断的结果,为了减少重复计算,可以事先将某个范围的数据的判断结果全都计算并保存起来,当需要再使用到的时候,直接使用即可。

打表实际上是一种思维方法,被广泛的应用于后续的各种算法中,例如:记忆化搜索、动态规划、素数表、斐波那契用数组递推代替函数递归等等。

猜你喜欢

转载自blog.csdn.net/u011815404/article/details/83070177
今日推荐