【暴力搜索】
暴力搜索,就是将所有情况都举出,并判断其是否符合题目条件。其基本方法是分析题意后,找到一个合适的维度列举每一个元素,以完成题目。
一般主流的 OJ 中,1000ms 的时间限制下可以运行操作数为 10^7 以内的运算(10^6 以内较保险),所以在采用枚举方法之前最好看一下数据范围,确保整个程序的执行操作数不会超过 10^6~10^7 量级。
在编程实现上,暴力枚举需要两个条件,一是枚举的范围要连续,如果枚举范围是离散的,那么一般很难使用 for 循环枚举出所有状态,也就不能保证解的完整性(有时数据看似离散,但实际上可通过预处理使其连续);二是枚举内容需要已知,不能在枚举到某个地方的时候出现未知。
【例题】
1.简单暴力
- 连续自然数和(洛谷-P1147):点击这里
- 斯诺登的密码(洛谷-P1603):点击这里
- 烤鸡(洛谷-P2089):点击这里
- Sonya and Matrix(CF-1004D):点击这里
- File Name(CF-978B):点击这里
- Remove Duplicates(CF-978A):点击这里
- Letters(CF-978C):点击这里
- Diverse Substring(CF-1037A):点击这里
- 最小函数值(信息学奥赛一本通-T1370):点击这里
- 权势二进制(51Nod-1413):点击这里
- 数三角形(51Nod-2497):点击这里
- 后面第一个大于(51Nod-2500):点击这里
- 最多分成多少块(51Nod-2502):点击这里
- 最长高地(51Nod-2509):点击这里
- 重排列(51Nod-2513):点击这里
- 小b删列(51Nod-2523):点击这里
- Sequence in the Pocket(ZOJ-4104):点击这里
- いっしょ / Be Together(AtCoder-2019):点击这里
- くんと選挙速報 / AtCoDeer and Election Report (AtCoder-2140):点击这里
- ISBN(POJ-2190):点击这里
- Derangement(AtCoder-3525):点击这里
- Sugar Water(AtCoder-3534):点击这里
- Chip Factory(HDU-5536):点击这里
- Matryoshka Dolls (Gym-102267C):点击这里
- Banana(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A):点击这里
2.双指针的应用
- 和为给定数(信息学奥赛一本通-T1244):点击这里
- Snuke Festival(AtCoder-3620):点击这里
- Three Parts of the Array(CF-1006C):点击这里
- Physics Practical(CF-253B):点击这里
3.其他
- Text Editor(CF-253C)(思维+暴力):点击这里
- Hydra(CF-244D)(思维+暴力):点击这里
- Playing with Permutations(CF-252D)(思维+暴力):点击这里
- Purification(CF-330C)(构造+暴力):点击这里
- Intense Heat(CF-1003C)(前缀和+暴力):点击这里
- 不降的数字(51Nod-2499)(分解数位+暴力):点击这里
- Relatively Prime Graph(CF-1009D)(暴力+GCD):点击这里
- Close Encounter(POJ-3039)(数学推导+暴力):点击这里
- Almost Arithmetic Progression(CF-978D)(数学推导+暴力):点击这里
- Elections(CF-1020C)(贪心+暴力):点击这里
- Mishka and Contest(CF-999A)(正反两遍暴力):点击这里