基础算法——枚举

今天我们就来看看神奇的枚举。

定义?

日常问号定义。
什么叫枚举?
就是指,尝试所有可能解,从而得出哪些是可行解。
举个栗子。
你想知道你的girlfriend(boyfriend)喜欢什么东西,那就可以尝试送给她(他)所有的东西,比如说花、音乐盒、跑车、房子、钱(嗯嗯嗯?画风不大对啊)。反正你能想到的(比如把你自己送给Ta)都试一下,然后你就可以知道Ta喜欢什么了。
很不现实,对吧?
所以这也体现出枚举的最大缺陷,枚举完全依托计算机的处理速度,如果速度跟不上,有些问题是没有办法解决的。
但是对于有些规模较小的问题,我们依然可以用枚举去解决。
下面我们看看例子。

例题

三连击

这是一道相当古老的题了,是NOIP1998普及组的题。
其实这道题完全可以打表,由此可见当年的出题还并不成熟。
当然,我们这里要说的一定是正解。
这里就是一个典型的枚举。
通过枚举第一个数,然后得到一组三个数,再判断三者的数位有没有重复。

回文日期

如果你跟我说刚刚那一道题太老了,那么我们就来看看这一道题。
这道题是NOIP2016普及组的第二题。
这里我们就是以“年”为枚举对象,对其进行枚举,再判断日期是否合法,最后得出答案。
当然,由本题,我们可以看出枚举的对象并非是能随便选的。
选择一个好的枚举对象,可能会使我们的程序简化很多。

总结

我们由以上例题可以看出枚举的一般解题思路:

  1. 观察数据范围,确定枚举是否可行
  2. 选定枚举对象
  3. 依照题意进行操作,得出完整解
  4. 判断所得的解是否符合题意

按照这几步,枚举解题基本就不是问题。

猜你喜欢

转载自blog.csdn.net/cggwz/article/details/79837247