C++ 数据结构与算法系列之枚举

本文详细介绍了C++中的枚举法,包括基本思想、枚举结构及优化策略。通过逐步优化枚举范围,将初始1000000次计算降低到仅需14次,展示了枚举法在解决特定问题时的有效性及其局限性。
摘要由CSDN通过智能技术生成

目录

1、枚举

1.1 枚举法的基本思想

1.2 枚举结构

1.3 使用例子

(1)不使用优化枚举 1000000次

(2)第一次优化枚举 59976次

(3)第二次优化枚举 576次

(4)第三次优化枚举 14次

1.4 枚举的优缺点

1.5 枚举算法的优化

1.6、枚举法敲代码技巧


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+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值