logo资料库

C语言算法之枚举法(acm例题).pdf

第1页 / 共61页
第2页 / 共61页
第3页 / 共61页
第4页 / 共61页
第5页 / 共61页
第6页 / 共61页
第7页 / 共61页
第8页 / 共61页
资料共61页,剩余部分请下载后查看
枚举法 —— 基本算法介绍之一 张铭 2007.9.19
主要内容 1、枚举法思想简介 2、利用枚举法解题 2.1 百钱百鸡 2.2 猴子分桃 2.3 宴会彩灯 2.4 质数方阵 3、枚举 vs. 搜索
1、枚举法思想简介 基本思想 枚举也称穷举,指的是从问题可能的解的集 合中一一枚举各元素。 用题目给定的检验条件判定哪些是无用的, 哪些是有用的。能使命题成立,即为其解。 典型应用举例: 密码破解 密码破解: 密码破解: 枚举次数: 枚举次数: 最好情况1 最好情况1 nk 最坏情况 最坏情况
引子 填写运算符 输入任意5个数 x1、x2、x3、x4、x5. 每 相邻两个数间填上一个运算符。在填人四 个运算符后,使得表达式值为一个指定值 y(y由键盘输入)。求出所有满足条件的表达 式。 结果分析 要执行 =256次。当数字的个数超过20? 44
枚举法初体验 枚举法的特点是算法简单,但是运算量 大是它的缺点。当问题的规模变大,循 环的阶数愈大,执行的速度愈慢。 从全局观点使用枚举法,计算量容 易过大。在局部地方使用枚举法, 其效果会十分显著。
2、利用枚举法解题 优化策略 减少枚举次数 合理选择用于枚举的变量 注意枚举的顺序 减少判断每种情况的时间
2.1 百钱买百鸡 鸡翁一,值钱五,鸡母一,值钱三,鸡 雏三,值钱一。百钱买百鸡,问鸡翁、 母、雏各几何? 根据题意列方程: 5x + 3y + z/3 = 100 x + y + z = 100 (x, y, z >= 0; 3整除z)
最简单直接的做法 根据方程写程序: for (x = 0; x <= 100; x++) for (y = 0; y <= 100 - x; y++) { 枚举次数: 101+100+……+ 1 = 5151次 z = 100 - x - y; if (z % 3 == 0 && 15 * x + 9 * y +z==300) cout<
分享到:
收藏