目录
1、枚举
1.1 枚举法的基本思想
枚举法又称穷举法,枚举所有可能状态,并用问题给定的条件来约束状态,检验哪些是需要的,哪些是不需要的。
1.2 枚举结构
循环 + 判断语句
设ai1是状态元素ai的最小值,aik是状态元素ai的最大值(1≤i≤n),
即a11≤a1≤a1k,a21≤a2≤a2k,a31≤a3≤a3k,……,an1≤an≤ank
for(a1=a11;a1≤a1k;a1++)
for(a2=a21;a2≤a2k;a2++)
……
for(ai=ai1;ai≤aik;ai++)
……
for(an=an1;an≤ank;an++)
if(状态(a1,…,ai,…,an)满足检验条件)
输出问题的解;
1.3 使用例子
百钱买百鸡
公鸡一只五块钱,母鸡一只三块钱,小鸡一块钱三只
现在要用一百块钱买一百只鸡,每种鸡最少一只,问公鸡、母鸡、小鸡各多少只?
(1)不使用优化枚举 1000000次
枚举变量:公鸡、母鸡、小鸡
枚举范围:公鸡、母鸡、小鸡都是1-100次,总计算次数100*100*100
枚举判断条件:
钱数=100:5公鸡+3母鸡+1/3小鸡=100
总鸡数=100:公鸡+母鸡+小鸡=100
小鸡%3==0
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 100;i++) //公鸡枚举
for (int j = 1; j <= 100;j++) //母鸡枚举
for (int k = 1; k <= 100;k++) //小鸡枚举
{
if (5*i+3*j+