YU_C++算法学习笔记 · 罗列

打印 上一主题 下一主题

主题 882|帖子 882|积分 2646

1.1 罗列类题目

· 罗列是什么?

罗列也叫穷举,是计算机解决题目最基本的计谋。其方法是逐一列举全部的可能性,根据题意要求进行合理的判定或计算,终极得到答案,本质上就是一种搜索算法
基础的罗列就是人们常说的“暴力”求解。对于差别的题目,不可过分依靠“暴力”求解,应该根据具体的场景来进行具体分析,选择更加简洁和高效的算法。
罗列就是用for,while等循环来实现的,通常都一个一个的去试。如果试的数据符合已知条件,则就认为,这个数就是要的答案,就不再罗列下去了。所谓罗列,实在就是逐步去试已往。但罗列有个坏处,若数据很大,许多,则罗列的范围就很广,又费空间,还费时间。以是用罗列的时间要想好空间范围,以确保达到时间的最简,与空间的最省。
罗列算法的运用场景就是适用于题目规模较小、解空间可穷举的环境
\(思路很好想,代码很好写,只不过速度慢了一些。\)
· 总结一下:


  • 运用循环把全部可能全试一遍,再根据题意做题。
  • 罗列算法长处在于简朴直观,不需要复杂的数学推导,易于实现。
  • 缺点那就是运算量过大,当题目的规模变大的时间,循环的阶数越大,实验速度越慢,很容易超时。
1.2 罗列题目讲解

· P1149 [NOIP2008 进步组] 火柴棒等式

· 大意:

给你 \(n\) 根火柴棍,你可以拼出多少个形如 \(A+B=C\) 的等式?等式中的 \(A\)、\(B\)、\(C\) 是用火柴棍拼出的整数(若该数非零,则最高位不能是 \(0\))。用火柴棍拼数字 \(0\sim9\) 的拼法如图所示:

注意:

  • 加号与等号各自需要两根火柴棍;
  • 如果 \(A\neq B\),则 \(A+B=C\) 与 \(B+A=C\) 视为差别的等式(\(A,B,C\geq0\));
  • \(n\) 根火柴棍必须全部用上。
样例 #1

样例输入 #1
  1. 14
复制代码
样例输出 #1
  1. 2
复制代码
· 讲解

我们可以先得到\(0-9\)各需要多少根火柴棒,然后再推出二位数,三位数,四位数各需要多少火柴棒。处理完后,我们可以直接罗列\(A\)和\(B\)。(可以证明\(A和B\)最大值为1111)、
\(Code:\)
点击我~ 获取代码[code]#includeusing namespace std;int ans=0,n;  //答案和火柴棒个数 int z[3005]={6,2,5,5,4,5,6,3,7,6};  //0~9所需的火柴棒 void f()  //预处理出10~1111的所需火柴棒 {        for(int i=10;i>n;        for(int i=0;i

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表