OI Wiki—枚举

 //新生训练,搬运整理

简介

枚举(英语:Enumerate)是基于已有知识来猜测答案的问题求解策略。

枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。

要点

给出解空间

建立简洁的数学模型。

枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?

减少枚举的空间

枚举的范围是什么?是所有的内容都需要枚举吗?

在用枚举法解决问题的时候,一定要想清楚这两件事,否则会带来不必要的时间开销。

选择合适的枚举顺序

根据题目判断。比如例题中要求的是最大的符合条件的素数,那自然是从大到小枚举比较合适。

例题

以下是一个使用枚举解题与优化枚举范围的例子。

Q:一个数组中的数互不相同,求其中和为 0 的数对的个数。

A1:枚举两个数

for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)if (a[i] + a[j] == 0) ++ans;

对于A1:

来看看枚举的范围如何优化。由于题中没要求数对是有序的,答案就是有序的情况的两倍(考虑如果 (a, b) 是答案,那么 (b, a) 也是答案)。对于这种情况,只需统计人为要求有顺序之后的答案,最后再乘上 2 就好了。

A2:不妨要求第一个数要出现在靠前的位置

for (int i = 0; i < n; ++i)for (int j = 0; j < i; ++j)if (a[i] + a[j] == 0) ++ans;

不难发现这里已经减少了 j 的枚举范围,减少了这段代码的时间开销。

对于A2:

我们可以在此之上进一步优化。

两个数是否都一定要枚举出来呢?枚举其中一个数之后,题目的条件已经确定了其他的要素(另一个数)的条件,如果能找到一种方法直接判断题目要求的那个数是否存在,就可以省掉枚举后一个数的时间了。较为进阶地,在数据范围允许的情况下,我们可以使用桶1记录遍历过的数。

//要求 a 数组中的数2的绝对值都小于 MAXN
bool met[MAXN * 2];
// 初始化 met 数组为 0
memset(met, 0, sizeof(met));
for (int i = 0; i < n; ++i)
{if (met[MAXN - a[i]])++ans;// 为了避免负数下标met[a[i] + MAXN] = 1;
}

复杂度分析

时间复杂度分析:对 a 数组遍历了一遍就能完成题目要求,当 n 足够大的时候时间复杂度为\Theta(n)

空间复杂度分析:\Theta( n + max { |x| :x \in a } )

OI Wiki 原文:枚举 - OI Wiki

~~~//仅当笔者个人备忘录使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NCC导入导出开发

&#x1f4e3;NCC导入导出开发 ✨1. 导入流程图 ✨2. 实现步骤 &#x1f434;1. 前端代码实现。 &#x1f434;2. 配置文件创建与设置。 &#x1f434;3. 后端代码实现。 &#x1f434;4. 注册后端代码类。

react-mosaic-component-一个React库--窗格布局

import { Mosaic, MosaicWindow, MosaicZeroState } from "react-mosaic-component";从名为react-mosaic-component的npm包中引入三个组件&#xff1a;Mosaic&#xff0c;MosaicWindow和MosaicZeroState。 react-mosaic-component是一个React库&#xff0c;用于创建…

一文掌握Vue依赖注入:原理、应用场景以及最佳模块化与单元测试实践,提升代码的可维护性与模块化程度

Vue 中的依赖注入&#xff08;Dependency Injection, DI&#xff09;机制通过 provide 与 inject API&#xff0c;实现了跨组件层级间的数据与服务透明传递&#xff0c;使父组件能够向其任意深度的子孙组件“注入”依赖&#xff0c;而不需要通过层层传递 props 或使用全局状态管…

接口测试 - postman

文章目录 一、接口1.接口的类型2. 接口测试3. 接口测试流程4. 接口测试用例1. 测试用例单接口测试用例-登录案例 二、HTTP协议1. HTTP请求2. HTTP响应 三、postman1. 界面导航说明导入 导出用例集 Get请求和Post请求的区别:2.postman环境变量和全局变量3. postman 请求前置脚本…

使用ganache实现Web3js和区块链交互的步骤 及问题解决:Command ‘express’ not found等

Web3js和区块链交互 做一个简单的dapp 1.express安装 sudo npm install express -g 出现问题&#xff1a;Command ‘express’ not found, 解决&#xff1a;在安装express时增加generator参数&#xff1a; npm install -g express-generator 成功后使用 express -e MyDa…

《Fundamentals of Power Electronics》——Boost电路及仿真

Boost电路的拓扑结构如下所示&#xff1a; 下面是在simulink中搭建的一个Boost电路的仿真实验平台&#xff0c;其中直流输入电压为100V&#xff0c;电感值为1mH(模拟电阻为1毫欧)&#xff0c;电容值为470uF&#xff0c;负载为50欧姆&#xff0c;占空比选择为0.5&#xff0c;开关…

探索的时光 (整数三分)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 5 3 2 1 2 3 输出 28 思路&#xff1a; 根据题意&#xff0c;已经给出了运算函数 当我们看到这些函数的时候&#xff0c;联想一下&#xff0c;它们的单调性&#xff0c;以…

【建议收藏】用AI快速生成一个网页(名侦探柯南~灰原哀主题网页),适合大学生web期末大作业

下面是提供给AI的提示词和AI给出的代码以及成果展示 1、生成一个网页导航栏&#xff0c;宽度为1300px&#xff0c;高度为60px。导航区域在导航栏最右侧不超出导航栏&#xff0c;高60px&#xff0c;宽度500px&#xff0c;里面是5个导航菜单项横向排列&#xff0c;每个宽度100px&…

MySQL-查询数据-练习

练习 1.创建一个查询&#xff0c;显示收入超过 12,000 的雇员的名字和薪水。 select LAST_NAME,SALARY from employees where SALARY > 12000;2.创建一个查询&#xff0c;显示雇员号为 176 的雇员的名字和部门号。 select LAST_NAME,DEPARTMENT_ID from employees where …

Electron+Vue3+Vite+ElectronForge整合 - 一键启动两个服务 一键打包两个服务

说明 本文介绍一下 Electron Vue3 Vite Electron Forge 的高级整合操作。vue3 : 使用 TS 的语法开发&#xff1b; Electron : 使用 JS 的语法开发。本文将从项目初始化开始&#xff0c;一步一步的完成项目的启动、打包全流程的介绍。实现的效果是 &#xff1a; 1、一个正常…

安装docker后部署一个redis服务

安装 Docker 后&#xff0c;您可以使用 Docker Hub 上提供的 Redis 镜像轻松部署 Redis 服务。以下是在 Docker 中部署 Redis 服务的步骤&#xff1a; 1. 拉取 Redis 镜像&#xff1a; 使用以下命令从 Docker Hub 拉取 Redis 镜像&#xff1a; docker pull redis2. 运行 Red…

Tomcat基本使用与控制台乱码解决方式

目录 Tomcat简单介绍 Tomcat基本使用 Tomcat控制台乱码解决方式 Tomcat简单介绍 tomcat是apache开源绿色版本的服务器。 Tomcat基本使用 安装&#xff1a;下载zip包解压即可。 卸载&#xff1a;删除解压的tomcat文件夹即可。 启动&#xff1a;双击bin/startup.bat 停止…

PCL 点云下采样VoxelGrid滤波器

目录 一. VoxelGrid介绍二.代码示例2.1.代码示例(pcl::PCLPointCloud2)2.2.代码示例(pcl::PointCloud)三.结果示例一. VoxelGrid介绍 VoxelGrid滤波器:可以对点云数据进行体素化,来实现点云数据的下采样(即减少点的数量,减少点云数据)。常见的点云体素滤波器还有统计滤…

开源博客项目Blog .NET Core源码学习(19:App.Hosting项目结构分析-7)

本文学习并分析App.Hosting项目中后台管理页面的主页面。如下图所示&#xff0c;开源博客项目的后台主页面采用layui预设类layui-icon-shrink-right设置样式&#xff0c;点击主页面中的菜单&#xff0c;其它页面采用弹框或者子页面形式显示在主页面的内容区域。   后台主页面…

鸿蒙OpenHarmony【轻量系统 环境搭建】 (基于Hi3861开发板)

安装Hi3861开发板特有环境 除上述[安装库和工具集]和[安装编译工具]外&#xff0c;针对Hi3861开发板还需要安装特定的编译工具。 工具要求 表1 Hi3861 WLAN模组需要安装的编译工具 开发工具用途SCons3.0.4编译构建工具python模块&#xff1a;setuptools、kconfiglib、pycry…

日本一站式软文发稿:开启你的日本市场之旅

在当今的业界里&#xff0c;软文发稿已经成为一种被广泛采用的营销策略。不同于硬广告的直接推销&#xff0c;软文发稿注重以讲故事&#xff0c;提供有价值的信息&#xff0c;借此影响和吸引读者&#xff0c;从而间接推广企业的产品和服务。 相对于其它地区&#xff0c;日本市…

【酱浦菌-爬虫项目】python爬取彼岸桌面壁纸

首先&#xff0c;代码导入了两个库&#xff1a;requests和parsel。这些库用于处理HTTP请求和解析HTML内容。 然后&#xff0c;它定义了一个变量url&#xff0c;指向网站’樱花2024年4月日历风景桌面壁纸_高清2024年4月日历壁纸_彼岸桌面’。 接下来&#xff0c;设置了一个HTT…

OpenHarmony实战开发-如何实现background-position样式动画开发

通过改变background-position属性&#xff08;第一个值为X轴的位置&#xff0c;第二个值为Y轴的位置&#xff09;移动背景图片位置&#xff0c;若背景图位置超出组件则超出部分的背景图不显示。 <!-- xxx.hml --> <div class"container"><div class&…

JAVA爬虫基础

第一章> 1、概述 2、项目搭建 3、URL提取 4、内容解析并持久化 第二章> 5、反爬虫及应对 …

2024.4.23 LoadRunner 测试工具详解 —— VUG

目录 引言 LoadRunner 三大组件之间的关系 LoadRunner 脚本录制 启动并访问 WebTours 脚本录制 编译 运行&#xff08;回放&#xff09; LoadRunner 脚本加强 事务插入 插入集合点 插入检查点 参数化 ​编辑 打印日志 引言 问题&#xff1a; 此处为啥选择使用 Lo…