每日一题 求和

1.题目解析 

求和_牛客题霸_牛客网 (nowcoder.com) 

这一题,主要描述的就是求满足和为m的子序列,对与子序列的问题可以使用决策树。

2.思路分析

决策树如下图所示:

  1. 递归结束条件: 当当前和 sum 等于目标和 m 时,说明找到了一个满足条件的组合,将当前组合加入结果列表中,并返回。
  2. 剪枝条件: 如果当前和 sum 已经大于目标和 m,或者当前数字 start 已经大于了最大数 n,则无需继续搜索,直接返回。
  3. 选择当前数字: 将当前数字 start 加入当前组合 path 中,并递归搜索下一个数字,同时更新当前和 sum
  4. 不选择当前数字: 直接递归搜索下一个数字,不将当前数字加入当前组合中。

基于以上思路,我们可以编写出如下的伪代码:

function dfs(start, path, sum):
    if sum == m:
        将当前组合 path 加入结果列表中
        返回

    if sum > m 或者 start > n:
        返回

    选择当前数字 start
    将 start 加入 path 中
    递归调用 dfs(start + 1, path, sum + start)
    将 start 从 path 中移除(回溯操作)

    不选择当前数字 start
    递归调用 dfs(start + 1, path, sum)
 

 3.代码实现

import java.util.*;public class Main{private static int n;//所有数的最大值private static int m;//要求的和private static boolean[] vis;//标记是否被使用private static int sum;//被选中的元素之和public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNextInt()){n = sc.nextInt();m = sc.nextInt();vis = new boolean[n + 1];sum = 0;dfs(1);//从第一个元素开始递归(相当于决策树的根节点)}}private static void dfs(int x){if(sum == m){//找到一种情况for(int i = 1; i <= n;i++){if(vis[i]){//被选择的都打印出来System.out.print(i + " ");}}System.out.println();//一次结果输出后换行return;}if(sum > m || x > n) return;//不符合条件的情况,剪枝//1.x位置的选 相当与前序遍历,先处理根在递归sum += x;vis[x] = true;//标记已经被使用dfs(x + 1);sum -= x;vis[x] = false;//回溯的时候初始状态//2.不选dfs(x + 1);}
}

 

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

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

相关文章

如何在华为手机上恢复已删除的视频[4种解决方案]

概括 在数字媒体时代&#xff0c;智能手机已成为我们的个人金库&#xff0c;存储以视频形式捕捉的珍贵记忆。然而&#xff0c;意外删除这些珍贵的文件可能会是一次令人心痛的经历。对于华为手机用户来说&#xff0c;由于删除或其他意外导致视频丢失尤其令人痛苦。但不用担心&a…

Python 拼图游戏

拼图游戏(puzzle)是一种常见的益智游戏&#xff0c;玩家通过拖动图块来正确拼接成完整的图片。 由一张原图&#xff0c;分割成图块&#xff0c;拼图块的大小将会根据行列数自动调整&#xff0c;然后随机打乱&#xff0c;玩家通过拖拽图块&#xff0c;最后复原原图。 &#x1f…

idea使用鼠标滚轮进行字体大小缩放

idea使用鼠标滚轮进行字体大小缩放 使用快捷键CtrlAltS进入到设置页面 在左上角搜索框输入“increase”&#xff0c;在左侧的Keymap中右击“Increase Fort Size”&#xff0c;点击“add mouse shortcut”&#xff0c;然后录入我们要设置的快捷键&#xff0c;比如我是点击ctrl鼠…

基于SpringBoot+Vue+Mysql的实验室低值易耗品管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

Django 里的app概念

在 vs code 里的 Terminal 里运行下面的命令来创建一个项目文件夹 django-admin startproject [新项目名称]进入到刚刚创建的新项目的文件夹&#xff0c;在 urls.py 文件里进行修改 """ URL configuration for mywebsite project.The urlpatterns list routes…

AtCoder Beginner Contest 354 (ABCDEFG题)视频讲解

2024年5月19日补充G题。 A - Exponential Plant Problem Statement Takahashi is growing a plant. Its height at the time of germination is 0 c m 0\,\mathrm{cm} 0cm. Considering the day of germination as day 0 0 0, its height increases by 2 i c m 2^i\,\mat…

看一遍就理解:MVCC原理详解

介绍 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是一种用于实现数据库并发访问控制的机制。它允许多个用户同时读写同一数据项&#xff0c;从而提高了数据库在高并发环境下的性能和响应速度。以下是具体介绍&#xff1a; 基本…

前端基础入门三大核心之HTML篇:深入解读div标签与HTML5的现代魅力

前端基础入门三大核心之HTML篇&#xff1a;深入解读div标签与HTML5的现代魅力 一、div标签&#xff1a;布局中的万金油1.1 div标签基本概念1.2 div标签的使用1.3 实践技巧 二、HTML5&#xff1a;重塑网页结构的新篇章2.1 HTML5简介2.2 语义化标签2.3 多媒体支持2.4 Canvas绘图 …

Python代码注释的艺术与智慧

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;注释的必要性 二、注释的误区&#xff1a;不是越多越好 过度注释的问题…

服务器端口号怎么看?如何查看服务器端口号呢?有哪些需要注意的?

简单来说&#xff0c;端口号就是计算机与外界通讯交流的出口&#xff0c;每个端口都有不同的编号&#xff0c;也就是“端口号”。它们是唯一的&#xff0c;用于标识不同的服务和应用程序。通过端口号&#xff0c;我们可以知道哪些服务正在运行&#xff0c;以及如何与它们进行通…

【Linux系统编程】进程概念、进程排队、进程标识符、进程状态

目录 什么是进程&#xff1f; 浅谈进程排队 简述进程属性 进程属性之进程标识符 进程操作之进程创建 初识fork fork返回值 原理角度理解fork fork的应用 进程属性之进程状态 再谈进程排队 进程状态 运行状态 阻塞状态 挂起状态 Linux下的进程状态 “R”(运行状…

洗地机哪个牌子最好用?2024洗地机排行榜

随着人们生活水平的提升&#xff0c;智能清洁家电已经成为日常生活中的必需品。如今的清洁家电市场上&#xff0c;洗地机、吸尘器和扫地机器人等设备各有其独特的功能和优势。洗地机结合了扫、拖、吸和自清洁等多种功能&#xff0c;不仅可以处理干湿垃圾&#xff0c;还能高效清…

批量修改数组的属性

首先&#xff0c;有这个对象 let a {id: 1,name: 张三,age: 18,sex: 0 } 需求&#xff1a;同时修改name,id,并添加一个新属性c 常规写法&#xff1a; a.id 2; a.name 李四; a.c 1; 但这种写法遇到批量就会很麻烦 解决方法&#xff1a; 方法1&#xff1a; 使用Object.as…

工业路由器在新能源数字化中的应用:重塑能源行业的未来

随着全球对可再生能源和能源效率的追求日益加强&#xff0c;新能源数字化已成为推动行业发展的关键因素。在这一变革的浪潮中&#xff0c;工业路由器以其卓越的性能和独特的功能&#xff0c;成为新能源数字化不可或缺的核心组件。本文将深入探讨工业路由器在新能源数字化中的应…

解决“unknown shorthand flag: ‘d‘ in -d‘”错误

前言 在使用Docker Compose部署应用时&#xff0c;你可能遇到过一条令人困惑的错误信息&#xff1a;“unknown shorthand flag: ‘d’ in -d”。这通常发生在尝试以守护进程模式启动容器时&#xff0c;而使用的命令格式与你的Docker版本不兼容。本文旨在深入解析这一问题根源&…

需求分析简介

为了开发出真正满足用户需求的软件产品&#xff0c;首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件&#xff0c;不论人们把设计和编码工作做得如何出色&#xff0c;不能真正满足用户需求的程序只会令用户失望&#xff0c;给开发者带来烦恼。 …

Sql Server 调用接口

首先创建一个通用请求接口的存储过程 create PROCEDURE [GetHttpResponse]url NVARCHAR(MAX), -- 请求地址jsonBody NVARCHAR(MAX), -- 请求BodystatusCode INT OUTPUT, -- 状态responseText NVARCHAR(MAX) OUTPUT -- 返回响应数据 AS BEGINBEGIN TRY-- 创建一个…

29.修改idea中git的提交记录上的提交名

步骤如下 &#xff1a; &#xff08;1&#xff09;打开您的IDEA&#xff0c;点击打开最下方的Terminal终端 &#xff08;2&#xff09;输入以下命令&#xff0c;并回车执行 2.1查看当前git的用户名命令&#xff1a; git config user.name 2.2更改用户名&#xff0c;在双引号…

使用Golang开发一个用于批量删除文件的命令行程序

核心代码 package cmdimport ("fmt""zdpgo_cobra""zdpgo_file" )func init() {rootCmd.AddCommand(deleteFileCmd)deleteFileCmd.Flags().StringVarP(&dirPath, "dir", "d", ".", "指定要删除的目录&qu…

Atlas 血缘分析-hive/spark

Apache Atlas部署安装 这里需要注意,需要从官网下载Atlas的源码,不要从git上分支去checkout,因为从分支checkout出来的代码,无法正常运行,这里小编使用针对Atlas-2.3.0源码进行编译. mvn clean -DskipTests package -Pdist部署前置条件 Elastic7.xHBase2.xKafla-2.xzook…