当前位置: 首页 > news >正文

[DFS深度优先搜索]集合里的乘法

集合里的乘法

题目描述

给定一个目标数T和一个整数集合S,判断是否存在S的一个非空子集,子集中的数相乘的积为T。

关于输入

输入为两行。
第一行为目标数T,和S中的元素个数N,以空格隔开。
第二行为S中的N个元素,以空格隔开。
其中 N <= 16。

关于输出

如果可以,则输出YES,否则输出NO。

例子输入
12 5
1 2 3 4 5
例子输出
YES
解题分析

这个算法的核心思想是使用深度优先搜索(DFS)遍历所有可能的子集,并计算它们的乘积。如果找到一个子集的乘积等于目标数,就返回YES,否则返回NO。

以下是该算法的详细步骤:

1. 首先,我们读取目标数T和集合S的元素。集合S的元素被存储在一个数组中,数组的索引从0开始。

2. 然后,我们调用深度优先搜索函数`dfs`,开始时的索引为0,乘积为1。这意味着我们从集合的第一个元素开始搜索,初始的乘积是1(因为任何数乘以1都等于它自己)。

3. 在`dfs`函数中,我们首先检查是否已经找到了解决方案(`flag`是否为1)或者当前乘积是否已经超过了目标数T。如果是的话,我们就直接返回,不再继续搜索。这是一种剪枝策略,可以避免无效的搜索,提高算法的效率。

4. 然后,我们检查当前的乘积是否等于目标数,如果是的话,我们就设置`flag`为1并返回。这表示我们已经找到了一个满足条件的子集。

5. 如果当前的索引已经达到了集合的大小,这意味着我们已经遍历了所有的元素,但还没有找到满足条件的子集,所以我们就返回。

6. 否则,我们对当前索引的元素有两种选择:一是选择它(将它乘入当前的乘积),二是不选择它(保持当前的乘积不变)。我们对这两种选择都进行搜索。这是深度优先搜索的核心步骤,通过递归调用`dfs`函数,我们可以遍历所有可能的子集。

7. 在主函数中,如果`flag`为1,说明我们找到了一个解决方案,输出YES。否则,输出NO。

这个算法的时间复杂度是O(2^n),其中n是集合的大小。因为对于集合中的每一个元素,我们都有两种选择:选择它或者不选择它。所以总共有2^n种可能的子集。由于题目中给出集合的大小不超过16,所以这个算法在时间上是可行的。

代码实现
#include <stdio.h>int N;
long long T, S[16];
char flag;void dfs(int index, long long product) {if (flag || product > T) return;if (product == T) {flag = 1;return;}if (index == N) return;dfs(index + 1, product * S[index]);dfs(index + 1, product);
}int main() {scanf("%lld %d", &T, &N);for (int i = 0; i < N; i++) {scanf("%lld", &S[i]);}dfs(0, 1);if (flag) {printf("YES\n");} else {printf("NO\n");}return 0;
}

相关文章:

[DFS深度优先搜索]集合里的乘法

集合里的乘法 题目描述 给定一个目标数T和一个整数集合S&#xff0c;判断是否存在S的一个非空子集&#xff0c;子集中的数相乘的积为T。 关于输入 输入为两行。 第一行为目标数T&#xff0c;和S中的元素个数N&#xff0c;以空格隔开。 第二行为S中的N个元素&#xff0c;以空…...

K8s 中 Pod OOMKilled 原因

目录 Exit Code 137 解决方案 JVM 感知 cgroup 限制 使用 JDK9 的容器感知机制尝试 问题分析 容器内部感知 CGroup 资源限制 在 Java10 中&#xff0c;改进了容器集成 JVM 参数 MaxDirectMemorySize -XX:MaxDirectMemorySize 的默认值是什么&#xff1f; 其他获取 ma…...

为什么程序员最应该学习的是运营与销售,而不是技术?

大概几个月前&#xff0c;我加入了某副业交流群。这里人才很多&#xff0c;不光是传统意义上的程序员&#xff0c;也有公司老板、偏门大佬、产品经理等。 群里的聊天主题就是搞钱俩字&#xff0c;大家讨论着如何搞钱&#xff0c;分享每日收益情况&#xff0c;以及自己做的产品等…...

MySql数据库常用指令(五)多表连接

MySql数据库常用指令&#xff08;五&#xff09;多表连接 一、内连接,或等值连接二、左连接三、右连接 实际应用中&#xff0c;我们常常要连接几个不同的MySQL表&#xff0c;因此在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询 INNER JOIN&#xff08;内…...

Centos7使用rpm安装mysql 5.7.43

Centos7使用rpm安装mysql 5.7.43 1、下载rpm包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar2、解压并安装 tar xf mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar yum -y install mysql-*3、按需修改mysql配置 #注意&a…...

补充:如何提高selenium的运行速度?

已经通读该专栏文章的同学,或许对UI自动化测试有了一定的掌握,细心的同学肯定会发现一个问题,当用例量达到一定程度时,对于整体用例的执行速度肯定不会很满意。除了应用多线程运行用例的方式加快速度,有没有其他的方法呢? 今天告诉大家,方法是有的!也是本人新学的。即…...

使用Python+Redis实现文章投票网站后端功能

1&#xff0e;实现投票功能&#xff0c;2&#xff0e;创建文章数据&#xff0c;3&#xff0e;对文章进行排序。 实现投票功能 实现投票功能&#xff0c;要注重文章的时效性与投票的公平性&#xff0c;所以需要给投票功能加上一些约束条件&#xff1a; 文章发布满一个星期后&…...

SpringBoot 环境使用 Redis + AOP + 自定义注解实现接口幂等性

目录 一、前言二、主流实现方案介绍2.1、前端按钮做加载状态限制&#xff08;必备&#xff09;2.2、客户端使用唯一标识符2.3、服务端通过检测请求参数进行幂等校验&#xff08;本文使用&#xff09; 三、代码实现3.1、POM3.2、application.yml3.3、Redis配置类3.4、自定义注解…...

Leetcode—18.四数之和【中等】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—18.四数之和 实现代码 class Solution { public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> ans;sort(nums.begin(), nums.end());int n …...

springsecurity6配置二

一、springsecurity6自定义认证异常处理器 1.1 AuthenticationEntryPointImpl.java package com.school.information.core.security.handler;import com.alibaba.fastjson.JSON; import com.school.information.enums.result.ResultStatusEnum; import com.school.informatio…...

php如何对比浮点数大小(bccomp函数)

第一部分&#xff0c;常规例子&#xff1a; 例1&#xff1a;左边比右边小&#xff0c;结果&#xff1a;-1 //示例&#xff0c;左边比右边小返回值&#xff1a;-1 $price1 2.14; $price2 3.14; $result bccomp($price1, $price2, 2); echo 对比结果&#xff1a;.$result;//…...

服务号和订阅号哪个好

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;在推送频率上来看&#xff0c;服务号每月能推送四条消息&#xff0c;而订阅号可以每天&#xff08;24小时&#xff09;推送一条消息。如果企业开通公众号的目的是提供服务&#xff0c;例如售前资讯…...

面试问题--智能指针

什么是智能指针&#xff1f; 当你在编写程序时&#xff0c;可能需要在运行时动态分配内存来存储数据。在传统的C中&#xff0c;你可能会使用 new 和 delete 操作符来手动管理内存。但是这样容易出现一些问题&#xff0c;比如忘记释放内存导致内存泄漏&#xff0c;或者释放了之…...

向量机SVM原理理解和实战

目录 概念场景导入 点到超平面的距离公式 最大间隔的优化模型 硬间隔、软间隔和非线性 SVM 用 SVM 如何解决多分类问题 1. 一对多法 2. 一对一法 SVM主要原理和特点 原理 优点 缺点 支持向量机模型分类 SVM实战如何进行乳腺癌检测 数据集 字段含义 代码实现 参…...

什么是 Node.js?

在 Node.js 出现之前&#xff0c;最常见的 JavaScript 运行时环境是浏览器&#xff0c;也叫做 JavaScript 的宿主环境。浏览器为 JavaScript 提供了 DOM API&#xff0c;能够让 JavaScript 操作浏览器环境&#xff08;JS 环境&#xff09;。 2009 年初 Node.js 出现了&#xf…...

系列九、声明式事务(xml方式)

一、概述 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的一种方式&#xff0c;Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明&#xff0c;是指在配置文件中声明&#xff0c;用在Spring配置文件中声明式的处理事务来…...

c盘清理——常用方法和工具整理

背景 最近c盘满了&#xff0c;只剩下1-2G&#xff0c;周末有空清理一下。对这块不太熟悉&#xff0c;下面只是把今天网上看到的比较好用的工具整理一下。 使用工具 磁盘大小查看工具——TreeSize&#xff08;收费&#xff09; 之前都是右键一个个看每个文件的大小&#xff0…...

【React】打包体积分析 source-map-explorer

通过分析打包体积&#xff0c;才能知道项目中的哪部分内容体积过大&#xff0c;方便知道哪些包需要进一步优化。 使用步骤 安装分析打包体积的包&#xff1a;npm i source-map-explorer在 package.json 中的 scripts 标签中&#xff0c;添加分析打包体积的命令对项目打包&…...

Zookeeper(一):在WSL单机搭建Zookeeper伪集群

目录 Zookeeper1 启动单个Zookeeper实例1.1 下载Zookeeper安装包并解压1.2 添加环境变量1.3 修改默认配置1.4 新建数据存储目录和日志目录1.5 启动Zookeeper1.6 停止Zookeeper 2 搭建Zookeeper集群2.1 新建集群目录2.2 配置环境变量2.3 创建节点目录2.4 修改配置2.5 创建节点ID…...

Go语法的特殊之处

上文我们讲了GO模块引入指令Go Mod&#xff0c;本文讲述Go语法的特殊之处 : 单变量 : hello:“hello” Go 语言中新增了一个特殊的运算符:&#xff0c;这个运算符可以使变量在不声明的情况下直接被赋值使用。其使用方法和带值声明变量类似&#xff0c;只是少了var关键字&…...

Bearer报告格式详解:如何解读安全扫描结果和统计信息

Bearer报告格式详解&#xff1a;如何解读安全扫描结果和统计信息 【免费下载链接】bearer Code security scanning tool (SAST) to discover, filter and prioritize security and privacy risks. 项目地址: https://gitcode.com/gh_mirrors/be/bearer Bearer是一款强大…...

Janus-Pro-7B开源镜像价值:支持LoRA微调,适配垂直领域图文任务

Janus-Pro-7B开源镜像价值&#xff1a;支持LoRA微调&#xff0c;适配垂直领域图文任务 Janus-Pro-7B是一个统一的多模态理解与生成AI模型&#xff0c;能够同时处理图像理解和文本到图像的生成任务。这个7.42B参数规模的模型在单一架构中实现了视觉问答、图像描述、OCR识别和文…...

教AI读小说:把《时光机器》变成一串数字的奇妙旅程

版权声明&#xff1a;本文同步发布于个人博客。欢迎交流与转载&#xff0c;但请务必注明出处。 导读&#xff1a;你有没有想过&#xff0c;人工智能是如何“读懂”人类语言的&#xff1f;其实&#xff0c;它们并不认识字。在AI眼里&#xff0c;莎士比亚的十四行诗和超市购物清单…...

深度解析League Akari:基于LCU API的模块化英雄联盟客户端工具集架构

深度解析League Akari&#xff1a;基于LCU API的模块化英雄联盟客户端工具集架构 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari…...

安卓/鸿蒙/iOS跨平台测试实战:从碎片化到分布式的高效覆盖策略

1. 跨平台测试的挑战与机遇 移动互联网发展到今天&#xff0c;已经形成了安卓、鸿蒙、iOS三足鼎立的局面。作为一名从业多年的测试工程师&#xff0c;我深刻体会到跨平台测试就像是在三个完全不同的游乐场里玩闯关游戏——每个场地都有自己的规则和隐藏关卡。安卓的碎片化问题就…...

PVE Tools 深度解析:从手动配置到自动化管理的虚拟化效率革命

PVE Tools 深度解析&#xff1a;从手动配置到自动化管理的虚拟化效率革命 【免费下载链接】pvetools proxmox ve tools script(debian9 can use it).Including email, samba, NFS set zfs max ram, nested virtualization ,docker , pci passthrough etc. for english user,ple…...

多模态对话系统从Demo到DAU破千万的4个生死关卡,阿里/微软/华为联合实验室内部复盘报告首次公开

第一章&#xff1a;多模态对话系统从Demo到DAU破千万的演进全景 2026奇点智能技术大会(https://ml-summit.org) 从实验室中首个支持语音图像输入的原型Demo&#xff0c;到支撑日活跃用户超1024万的工业级多模态对话平台&#xff0c;这一演进并非线性叠加&#xff0c;而是由数据…...

芯片设计中的Vt选择:如何平衡SVT、LVT和ULVT的速度与功耗

芯片设计中的Vt选择&#xff1a;如何平衡SVT、LVT和ULVT的速度与功耗 在28nm以下先进工艺节点中&#xff0c;阈值电压&#xff08;Vt&#xff09;选择已成为芯片设计的关键决策点。某次流片失败案例显示&#xff0c;由于ULVT单元使用比例过高&#xff0c;导致芯片静态功耗超标4…...

MQTT安全实战:用Mosquitto配置带身份验证的物联网消息服务(2023最新版)

MQTT安全实战&#xff1a;用Mosquitto配置带身份验证的物联网消息服务&#xff08;2023最新版&#xff09; 在物联网设备数量呈指数级增长的今天&#xff0c;MQTT协议因其轻量级和高效性成为设备通信的首选方案。但默认配置的MQTT服务往往像敞开的城门&#xff0c;任何设备都能…...

前端八股浏览器网络(1)---响应头

一、什么是响应头&#xff1f;响应头是 HTTP 响应中&#xff0c;服务器向浏览器传递的附加信息&#xff0c;用于描述响应数据类型、缓存策略、跨域权限、Cookie 设置等&#xff0c;不包含实际业务数据。HTTP 响应结构&#xff1a; ┌─────────────────────…...