第一节 枚举

  枚举又叫穷举,是程序设计中最常用的算法之一,是一种很*很暴力的算法。要说它的方法,就是没有方法——通过将所有可能的结果一一列举出来进行判断,获得想要的结果的方法。枚举算法的特点就是比较单纯,容易写出来程序,但是速度非常慢,只能用来解决小规模的问题。

  常见的题型有很多,比如计算空缺算式或者是火柴棒问题,接下来我们来举例说明一道非常经典的题目,来体会一下枚举算法。

  我国古代数学家章丘建在《算经》一书中提过一道数学问题:鸡翁一值钱五,鸡母一值钱散,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何。这就是经典的百钱百鸡问题。除了原书中使用的方程式之外,我们还可以使用枚举法来进行计算,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int i,j,k;
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=100;k++)
if((i*5+j*3+k/3==100)&&(i+j+k==100)&&(k%3==0))
printf("%d %d %d\n",i,j,k);
return 0;
}

  在之前杭电的练习题中,我们也遇到过使用枚举算法的题目,hdu2010题的水仙花数就是。大家可以练习一下全排列的问题,练习一下枚举算法。