YU_C++算法学习笔记 枚举

news/2024/10/19 13:45:13

1.1 枚举类问题

· 枚举是什么?

枚举也叫穷举,是计算机解决问题最基本的策略。其方法是一一列举所有的可能性,根据题意要求进行合理的判断或计算,最终得到答案,本质上就是一种搜索算法

基础的枚举就是人们常说的“暴力”求解。对于不同的问题,不可过分依赖“暴力”求解,应该根据具体的场景来进行具体分析,选择更加简洁和高效的算法。

枚举就是用forwhile等循环来实现的,通常都一个一个的去试。如果试的数据符合已知条件,则就认为,这个数就是要的答案,就不再枚举下去了。所谓枚举,其实就是慢慢去试过去。但枚举有个坏处,若数据很大,很多,则枚举的范围就很广,又费空间,还费时间。所以用枚举的时候要想好空间范围,以确保达到时间的最简,与空间的最省。

枚举算法的运用场景就是适用于问题规模较小、解空间可穷举的情况

\(思路很好想,代码很好写,只不过速度慢了一些。\)

· 总结一下:

  1. 运用循环把所有可能全试一遍,再根据题意做题。
  2. 枚举算法优点在于简单直观,不需要复杂的数学推导,易于实现。
  3. 缺点那就是运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢,很容易超时。

1.2 枚举题目讲解

· P1149 [NOIP2008 提高组] 火柴棒等式

· 大意:

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

注意:

  1. 加号与等号各自需要两根火柴棍;
  2. 如果 \(A\neq B\),则 \(A+B=C\)\(B+A=C\) 视为不同的等式(\(A,B,C\geq0\));
  3. \(n\) 根火柴棍必须全部用上。

样例 #1

样例输入 #1
14
样例输出 #1
2

· 讲解

我们可以先得到\(0-9\)各需要多少根火柴棒,然后再推出二位数,三位数,四位数各需要多少火柴棒。处理完后,我们可以直接枚举\(A\)\(B\)。(可以证明\(A和B\)最大值为1111)、

\(Code:\)

点击我~ 获取代码
#include<bits/stdc++.h>
using 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<=2222;i++)z[i]=z[i/10]+z[i%10];  //i/10为十位,i%10为个位 
}
int main()
{f();  //预处理每个数字应该需要的火柴棒根数 cin>>n;for(int i=0;i<=1111;i++)for(int j=0;j<=1111;j++){int k=i+j;  //k是A+B的和 if(z[i]+z[j]+z[k]+4==n) //加数+加数+和+等号与加号所需的火柴棒个数 为n的话,ans就++. ++ans;}cout<<ans<<'\n';  //输出 return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73429.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

mysql问题排查常用脚本

1.查询不是sleep或者有状态的sqlselect * from information_schema.`PROCESSLIST` where command != SLEEP2.查询运行中的事务select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx3.查看进程show full processlist本篇文章如有…

Day9 备战CCF-CSP练习

202303-1 202303-2Day9 题目描述 在学习了文本处理后,小 \(P\) 对英语书中的 \(n\) 篇文章进行了初步整理。 具体来说,小 \(P\) 将所有的英文单词都转化为了整数编号。 假设这 \(n\) 篇文章中共出现了\(m\) 个不同的单词,则把它们从 \(1\) 到 \(m\) 进行编号。 这样,每篇文…

Linux第三次作业

1、将网络改成静态网络(使用配置文件进行配置),要求如下 ip:192.168.122.X (x为100+学号) DNS:192.168.122.254 域名:example.com 相关命令步骤如下:vim /etc/sysconfig/network-scripts/ifcfg-网卡名 //进入网卡配置网卡信息systemctl restart network //重启网卡服务…

Notepad++将搜索内容所在行选中,并进行复制等操作

背景 Notepad++在非常多的数据行内容中,按照指定内容检索,并定位到具体行,而后对内容行的数据进行复制、剪切、删除等处理动作。 操作说明 检索并标记所在行弹出搜索框:按下 Ctrl + F。输入查找字符串:在搜索框中输入要查找的字符串。标记记录:在查找框顶部菜单中选择【标…

2024.10.17~19 杂题

杂题 AcWing5728. 截取子串 一眼 dp,令 \(f[i]\) 表示考虑到第 \(i\) 位的答案。 由于要求方案数,要么加法原理,要么乘法原理。 观察样例二,用乘法原理可以解释但是很难扩展到 \(f\) 上,所以考虑加法原理。对于样例二,每一个位置字母都一样,不难发现 \(f[3]=f[1]+f[2]\)…

Transformer中的位置编码(Positional Encoding)

Transformer中的位置编码(Positional Encoding) 标准位置编码 原理上Transformer是无法隐式学到序列的位置信息的,为了可以处理序列问题,Transformer提出者的解决方案是使用位置编码(Position Encode/Embedding,PE)[1][2] . 大致的处理方法是使用sin和cos函数交替来创建位…

虚拟歌姬列传

前言:纵观歌姬历史,初为Vocaloid一匡天下,然今群雄竞起,UTAU,SV群英荟萃,大有百花齐放之态也,今当尽绵薄之力,浅修其史,以说心也 啊啊啊 初音ミク重音テト(SV)重音テト(UTAU)(v)FlowerGUMI镜音レン,镜音リン巡音ルカ可不(KAFU)歌爱雪IAVY1MEIKOKAITO花隈千冬