NOIP普级组枚举专题.ppt_第1页
NOIP普级组枚举专题.ppt_第2页
NOIP普级组枚举专题.ppt_第3页
NOIP普级组枚举专题.ppt_第4页
NOIP普级组枚举专题.ppt_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NOIP基础算法综合 枚举法 江苏省南通市通州区金郊初中信息技术教研组 关联文件操作 assign input 文件名 in assign output 文件名 out reset input rewrite output close input close output 注意 主程序中exit前 全程序中halt前务必加close 2020年1月26日星期日 衡阳市第一中学计算机代表队 DX8080 2 数据类型 整形 integer 32768 32767longint 2147483648 2147483647qword 0 18446744073709551615int64 9223372036854775808 9223372036854775807 较少用 不可作为循环变量 实型 real布尔型 boolean true false 字符型 char字符串 string 255位 ansistring 2020年1月26日星期日 衡阳市第一中学计算机代表队 DX8080 3 一 枚举法的基本思想 枚举法的基本思想是根据提出的问题枚举所有可能状态 并用问题给定的条件检验哪些是需要的 哪些是不需要的 能使命题成立 即为其解 枚举结构 循环 判断语句 二 枚举法的条件 虽然枚举法本质上属于搜索策略 但是它与后面讲的回溯法有所不同 因为适用枚举法求解的问题必须满足两个条件 可预先确定每个状态的元素个数n 状态元素a1 a2 an的可能值为一个连续的值域 三 枚举法的框架结构 设ai1 状态元素ai的最小值 aik 状态元素ai的最大值 1 i n 即a11 a1 a1k a21 a2 a2k ai1 ai aik an1 an ankfora1 a11toa1kdofora2 a21toa2kdo forai ai1toaikdo foran an1toankdoif状态 a1 ai an 满足检验条件then输出问题的解 枚举法的优点 由于枚举算法一般是现实生活中问题的 直译 因此比较直观 易于理解 由于枚举算法建立在考察大量状态 甚至是穷举所有状态的基础上 所以算法的正确性比较容易证明 枚举法的缺点枚举算法的效率取决于枚举状态的数量以及单个状态枚举的代价 因此效率比较低 四 枚举法的优缺点 直译 枚举 直接根据题意设定枚举对象 范围和约束条件 注意认真审题 不要疏漏任何条件 例题1 砝码称重 noip1996 问题描述 设有1g 2g 3g 5g 10g 20g的砝码各若干枚 其总重 1000 求用这些砝码能称出不同的重量个数 文件输入 输入1g 2g 3g 5g 10g 20g的砝码个数 文件输出 输出能称出不同重量的个数 样例输入 110000 样例输出 3 分析 根据输入的砝码信息 每种砝码可用的最大个数是确定的 而且每种砝码的个数是连续的 能取0到最大个数 所以符合枚举法的两个条件 可以使用枚举法 枚举时 重量可以由1g 2g 20g砝码中的任何一个或者多个构成 枚举对象可以确定为6种重量的砝码 范围为每种砝码的个数 判定时 只需判断这次得到的重量是新得到的 还是前一次已经得到的 即判重 由于重量 1000g 所以 可以开一个a 1001 的数组来判重 核心参考代码 fillchar b sizeof b false readln c 1 c 2 c 3 c 4 c 5 c 6 fori 0toc 1 doforj 0toc 2 dofork 0toc 3 doforl 0toc 4 doform 0toc 5 doforn 0toc 6 dobeginsum 1 i 2 j 3 k 5 l 10 m 20 n b sum true end ans 0 fori 1to1000doifb i thenans ans 1 writeln ans 问题描述 给你n根火柴棍 你可以拼出多少个形如 A B C 的等式 等式中的A B C是用火柴棍拼出的整数 若该数非零 则最高位不能是0 用火柴棍拼数字0 9的拼法如图所示 注意 1 加号与等号各自需要两根火柴棍2 如果A B 则A B C与B A C视为不同的等式 A B C 0 3 n根火柴棍必须全部用上 输入 输入文件matches in共一行 又一个整数n n 24 输出 输出文件matches out共一行 表示能拼成的不同等式的数目 例题2 火柴棒等式 NOIP2008 例题2 火柴棒等式 NOIP2008 问题简述 给你n n 24 根火柴棒 叫你拼出 A B C 这样的等式 求方案数 思路点拨 本题主要考查对枚举法的掌握 可以枚举A和B的取值 考查等式是否刚好用了24根火柴棒 1S的时限对枚举的范围有所要求 必须要仔细分析A和B的取值 例题2 火柴棒等式 NOIP2008 本题最多24根火柴 等号和加号共用4根火柴 所以A B C这3个数字需用20根火柴 我们考查A和B的最大的取值可能 0 9这10个数字所用的火柴数为6 2 5 5 4 5 6 3 7 6 很明显数字1用的火柴棒最少只要2根 为了加快速度 可以将0到2000的所有整数需要的火柴棒数目提前算好保存在数组中 解题思路 n 24 数据范围很小 首先用两个循环枚举两个加数的每种情况 然后把两加数相加 算出和 后用三个数所使用的火柴棒数相加 可以用一个函数计算 判断所得的和是否等于 n 4 符号 如果相等 就把记录答案的计数器变量自加1 重复步骤 直到循环结束 下面看代码 constinp medic in oup medic out num array 0 9 ofinteger 6 2 5 5 4 5 6 3 7 6 0 9火柴棒数maxn 1000 varf array 0 maxn 2 oflongint i j k n ans longint s string procedureinit 0 2000每个数需要的火柴棒数vari j k longint s string beginfori 0tomaxn 2dobeginstr i s f i 0 forj 1tolength s doinc f i num s j end end beginassign input inp reset input assign output oup rewrite output readln n init ans 0 n n 4 总火柴棒数减去 和 所需的火柴棒数fori 0tomaxndo 枚举Abeginiff i nthencontinue 剪枝forj 0tomaxndo 枚举Bbeginiff i f j nthencontinue 剪枝k i j iff i f j f k ntheninc ans 符合条件 总数加一end end write ans close input close output end programmatches varn longint beginassign input matches in reset input assign output matches out rewrite output read n n n 4 ifn 9thenbeginwriteln 0 close output exit end casenof9 writeln 1 10 writeln 2 11 writeln 8 12 writeln 9 13 writeln 6 14 writeln 9 15 writeln 29 16 writel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论