一、枚举法

枚举法,本质上就是搜索算法。

1. 基本思想

枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素。
用题目中给定的检验条件判定哪些是无用的,哪些是有用的,能使命题成立,即为其解。

2. 优缺点

优点:算法简单,在局部地方使用枚举法,效果十分的好。
缺点:运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢。

3. 枚举法的优化

枚举算法的时间复杂度可以用状态总数 * 考察单个状态的耗时来表示,因此主要优化是:

  • 减少状态总数(即减少枚举变量和枚举变量的值域)
  • 降低单个状态的考察代价;

优化过程从几个方面考虑,具体如下:

  • 提取有效信息;
  • 减少重复计算;
  • 将愿问题化为更小的子问题;
  • 根据问题的性质剪枝;
  • 引进其它算法;

4. 相关题目

[NOIP2006 普及组] 明明的随机数 NOIP 2006 普及组 第一题
[NOIP2015 普及组] 金币 NOIP 2006 普及组 第四题
[NOIP2005 普及组] 陶陶摘苹果 NOIP 2005 普及组 第一题
[NOIP2010 普及组] 数字统计 NOIP 2010 普及组 第二题
[NOIP2005 普及组] 校门外的树 NOIP 2005 普及组 第二题
[NOIP2016 普及组] 买铅笔 NOIP 2016 普及组 第四题
[NOIP2004 提高组] 津津的储蓄计划 NOIP 2004 普及组 第一题

二、模拟法

具体问题,具体分析。

1. 基本思想

模拟法是最直观的算法,通常是对某一类事件进行描述,通过事件发生的先后顺序进行输入输出。即根据实际问题建立模型,模拟实际玩法从而解决问题。

2. 解题步骤

  • 认真仔细的读懂题目。模拟题的描述通常都比较详细,篇幅一般都比较长,应该边阅读边将有关的条件一条条地记录下来,阅读完成后要反复核对,绝对不能有错漏。
  • 建立各个条件之间的关系,最好用一些简明的表格列出。
  • 认真分析这些关系,并建立这些关系的数学模型。
  • 规划各个模块的结构,用相应的语言、逐步求精的方法描述具体的算法。
  • 编写程序,调试并运行。
  • 检查题目给出的样例能否通过。竞赛题目中一般都会给出输入输出样例,以便检查程序的输入输出格式是否正确,但这些样例往往会比竞赛时评判所用的测试数据简单,所以你不能满足于通过这些样例,还要尽量自拟一些更复杂、更全面的测试数据来检查程序的正确性。经过反复的调试、检查,才算完成该题。