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

算法----回溯(附录---剪枝)

回溯相信大家都已经了解了所以这章我将见但介绍下回溯剪枝

为什要剪枝

在《算法----回溯(正文)》中我提到过回溯就是暴力,为什么那些题能过,因为数据范围小
那如果数据范围大了,就不行了,这时剪枝的作用就出来了,去除重复多余,不符合的把时间复杂度降下来

什么是剪枝

将不需要的删除,不考虑

回溯剪枝模板

void dfs(变量){if(终止条件){存放结果return ;} 判断(剪枝)(1.如果这都不符合了那么后面肯定不符合2.重复的东西有了就可以不要了) for(.....){判断标记dfs();回溯 } 
}

回溯剪枝例题

1318:【例5.3】自然数的拆分
【题目描述】
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。

当n=7共14种拆分方法:

7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
【输入】
输入n。

【输出】
按字典序输出具体的方案。

【输入样例】
7
【输出样例】
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4


#include<bits/stdc++.h>
using namespace std;
int n;
int ab[350];
void print(int cnt){cout<<n<<"=";bool f=false;for(int i=1;i<=cnt;i++){if(f){cout<<"+";}cout<<ab[i];f=true;} cout<<"\n";
}
void dfs(int cnt,int s,int last){for(int i=last;i<n;i++){if(s-i==0){ab[cnt]=i;print(cnt);return ;}else if(s-i>0){ab[cnt]=i;dfs(cnt+1,s-i,i);}}
}
int main()
{
cin>>n;
dfs(1,n,1);return 0;
}
//不减枝

#include<bits/stdc++.h>
using namespace std;
int n;
int ab[350];
void print(int cnt){cout<<n<<"=";bool f=false;for(int i=1;i<=cnt;i++){if(f){cout<<"+";}cout<<ab[i];f=true;} cout<<"\n";
}
void dfs(int cnt,int s,int last){for(int i=last;i<n;i++){if(s-i==0){ab[cnt]=i;print(cnt);return ;}else if(s-i>0){ab[cnt]=i;dfs(cnt+1,s-i,i);}else{break;}}
}
int main()
{
cin>>n;
dfs(1,n,1);return 0;
}
//剪枝

总结:剪枝对于小数据来说不算啥,但对于大数据就很重要了

相关文章:

算法----回溯(附录---剪枝)

回溯相信大家都已经了解了所以这章我将见但介绍下回溯剪枝 为什要剪枝 在《算法----回溯&#xff08;正文&#xff09;》中我提到过回溯就是暴力&#xff0c;为什么那些题能过&#xff0c;因为数据范围小 那如果数据范围大了&#xff0c;就不行了&#xff0c;这时剪枝的作用就…...

从Unity到Three.js(模型文件加载)

模型加载功能探索&#xff0c;用blender导出了个glb格式的cube进行的测试。 初接触js语法&#xff0c;回调注册的地方直接使用匿名函数总感觉脑子跟不上&#xff0c;反应不过来&#xff0c;就把加载后的回调简单封装了下&#xff0c; 官方文档是直接使用的匿名函数。 另外看官方…...

Webshell一句话木马

一、webshell介绍&#xff08;网页木马&#xff09; 分类&#xff1a; 大马&#xff1a;体积大、隐蔽性差、功能多 小马&#xff1a;体积小&#xff0c;隐蔽强&#xff0c;功能少 一句话木马&#xff1a;代码简短&#xff0c;灵活多样 二、一句话木马&#xff1a; &#xff1a;…...

【Web】Spring rce CVE-2022-22965漏洞复现学习笔记

目录 原理概览 漏洞简述 Tomcat AccessLogValve 和 access_log 例题: 原理概览 spring框架在传参的时候会与对应实体类自动参数绑定&#xff0c;通过“.”还可以访问对应实体类的引用类型变量。使用getClass方法&#xff0c;通过反射机制最终获取tomcat的日志配置成员属性…...

springboot/ssm大学生选修选课系统高校选课排课成绩管理系统Java系统

springboot/ssm大学生选修选课系统高校选课排课成绩管理系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;my…...

【芯片设计- RTL 数字逻辑设计入门 14 -- 使用子模块实现三输入数的大小比较】

文章目录 三输入数的大小比较问题分析verilog codeTestBench Code综合图仿真波形图 三输入数的大小比较 在数字芯片设计中&#xff0c;通常把完成特定功能且相对独立的代码编写成子模块&#xff0c;在需要的时候再在主模块中例化使用&#xff0c;以提高代码的可复用性和设计的层…...

Xilinx FPGA——在线升级

同以前单片机在线升级的做法一样&#xff0c;本质就是通信Flash操作跳转。 一、通信驱动 我使用的是UDP有线传输&#xff0c; 二、Flash芯片驱动 规划Flash芯片的区域&#xff0c;一般bootloader放在起始位置&#xff0c;APP放在bootloader之后的空白区域。 2.1 Flash擦除 我…...

电商小程序02数据源设计

上一篇我们讲解了电商小程序的需求分析&#xff0c;分析了需要具备的功能并且绘制了系统原型。有了原型之后下一步的事情就是根据原型来设计数据源。 数据源就像盖房子打地基一样&#xff0c;地基打不好&#xff0c;楼可能就盖不高&#xff0c;盖起来要再想调整就比较困难。 …...

Leetcode 3033. Modify the Matrix

Leetcode 3033. Modify the Matrix 1. 解题思路2. 代码实现 题目链接&#xff1a;3033. Modify the Matrix 1. 解题思路 这一题是一道easy的题目&#xff0c;整体思路上没啥难度&#xff0c;就是按照题目翻译一下即可&#xff0c;先遍历一下找到每一列的最大元素&#xff0c…...

蓝桥杯刷题--python-4

0成绩分析 - 蓝桥云课 (lanqiao.cn) import os import sys # 请在此输入您的代码 n=int(input()) max_=float(-inf) min_=float(inf) res=0 for _ in range(n): score=int(input()) # 最高分 max_=max(max_,score) # 最低分 min_=min(min_,score) # 总分 res+=sc…...

openJudge | 距离排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给出三维空间中的n个点&#xff08;不超过10个&#xff09;,求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离。 输入 输入包括两行&#xff0c;第一行包含一个整数n表示点的个数&#xff0c;第二…...

【算法】排序详解(快速排序,堆排序,归并排序,插入排序,希尔排序,选择排序,冒泡排序)

目录 排序的概念&#xff1a; 排序算法的实现&#xff1a; 插入排序&#xff1a; 希尔排序&#xff1a; 选择排序&#xff1a; 堆排序&#xff1a; 冒泡排序&#xff1a; 快速排序&#xff1a; 快速排序的基本框架&#xff1a; 1.Hoare法 2. 挖坑法 3.前后指针法 快…...

LeetCode Python -8.字符串转整数

文章目录 题目答案运行结果 题目 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一个…...

【java】笔记10:类与对象——本章练习

题目1&#xff1a; 代码如下&#xff1a; import java.util.Scanner; public class Input{public static void main(String[]args){Circle cnew Circle();PassObject yuannew PassObject();System.out.println("r""\t""times");yuan.printAreas…...

《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P9 访问 Steam&#xff08;Acessing Steam&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…...

缓存穿透问题与解决方案

引言 在分布式系统中&#xff0c;缓存技术被广泛应用以提高系统性能和响应速度。然而&#xff0c;缓存穿透是一个常见而严重的问题&#xff0c;特别是在面对大规模请求时。本文将深入探讨缓存穿透的原因、影响以及一些有效的解决方案&#xff0c;以确保系统在面对这一问…...

《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)

文章目录 1.1 Git 简介&#xff1a;版本控制的演变1.1.1 基础知识讲解1.1.2 重点案例&#xff1a;协作开发流程优化案例&#xff1a;功能开发与分支策略 1.1.3 拓展案例 1&#xff1a;代码审查与合并1.1.4 拓展案例 2&#xff1a;冲突解决 1.2 安装和配置 Git&#xff1a;首次设…...

交易中的胜率和盈亏比估算

交易中的胜率和盈亏比估算 1.定义 胜率是指交易者在一定时间内成功交易的次数占总交易次数的比例。例如&#xff0c;如果交易者在10次交易中成功了6次&#xff0c;那么他的胜率就是60%。 盈亏比是指交易者每笔成功交易的盈利与每笔失败交易的亏损之间的比例。例如&#xff0…...

mysql RR、RC隔离级别实现原理

事务隔离级别实现过程 快照读&#xff08;select语句&#xff09; 获取事务自己版本号&#xff0c;即事务 ID获取 Read View 查询得到数据&#xff0c;然后 Read View 中事务版本号进行比较。如果不符合 Read View 可见性规则&#xff08;看最新数据还是副本里的数据&#xf…...

c语言--指针数组(详解)

目录 一、什么是指针数组&#xff1f;二、指针数组模拟二维数组 一、什么是指针数组&#xff1f; 指针数组是指针还是数组&#xff1f; 我们类比一下&#xff0c;整型数组&#xff0c;是存放整型的数组&#xff0c;字符数组是存放字符的数组。 那指针数组呢&#xff1f;是存放…...

高考解析几何“秒杀”技巧:用极点极线快速搞定椭圆定点定值难题

高考解析几何“秒杀”技巧&#xff1a;用极点极线快速搞定椭圆定点定值难题 解析几何作为高考数学的压轴题型&#xff0c;常常让考生望而生畏。面对复杂的计算和抽象的条件&#xff0c;如何在有限时间内快速找到突破口&#xff1f;极点极线理论作为高等几何中的重要工具&#x…...

从0到1:手把手教你搭建VSCode(附避坑指南,拒绝报错),全程复制粘贴即可

&#x1f525;个人主页&#xff1a;北极的代码&#xff08;欢迎来访&#xff09; &#x1f3ac;作者简介&#xff1a;java后端学习者 ❄️个人专栏&#xff1a;苍穹外卖日记&#xff0c;SSM框架深入&#xff0c;JavaWeb ✨命运的结局尽可永在&#xff0c;不屈的挑战却不可须臾或…...

Go语言AI编程助手SDK:提升Cursor代码理解与生成精准度

1. 项目概述&#xff1a;一个为AI编程而生的Go语言SDK如果你是一名Go语言开发者&#xff0c;同时又在深度使用Cursor这样的AI辅助编程工具&#xff0c;那么你很可能已经感受到了一个痛点&#xff1a;如何让AI更精准、更高效地理解你的代码库&#xff0c;并在此基础上进行智能操…...

【Midjourney数字艺术风格终极指南】:20年AI视觉专家亲授7大核心风格参数调优法则(含V6.1新增Realism Mode实测数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney数字艺术风格演进与V6.1核心变革 Midjourney自V1发布以来&#xff0c;其图像生成范式经历了从纹理模拟到语义理解、从风格模仿到跨模态协同的深层跃迁。V6.1标志着模型首次在原生架构中集成…...

基于RP2040与CircuitPython的键盘内嵌DOOM游戏启动器DIY指南

1. 项目概述与核心思路几年前&#xff0c;我还在用笨重的全尺寸键盘时&#xff0c;就总琢磨着怎么给这每天摸上八小时的家伙加点“私货”。直到后来玩起了RP2040和CircuitPython&#xff0c;一个念头就冒出来了&#xff1a;能不能把游戏直接“焊”进键盘里&#xff1f;不是那种…...

AI编程助手CodeBuddy:VS Code扩展的架构、部署与高效使用指南

1. 项目概述&#xff1a;CodeBuddy&#xff0c;你的AI编程伙伴最近在GitHub上看到一个挺有意思的项目&#xff0c;叫codebuddy&#xff0c;作者是olasunkanmi-SE。光看名字就能猜个大概——“代码伙伴”&#xff0c;这显然是一个旨在辅助编程的工具。作为一个在开发一线摸爬滚打…...

嵌入式测试学习第 12天:串口基础概念:UART、波特率、数据位、校验位

串口基础概念&#xff1a;UART、波特率、数据位、校验位一、串口整体基础概念1、什么是UART串口2、串口实物真实图片① 主板/开发板排针串口② USB转TTL串口模块③ 老式DB9工业串口公头母头二、串口四大核心参数1、波特率概念常用标准固定值通俗理解测试场景2、数据位概念作用3…...

移动端Shell集成AI助手:ShellGPTMobile部署与实战指南

1. 项目概述&#xff1a;当ShellGPT遇见移动端如果你是一个重度命令行用户&#xff0c;同时又对AI助手&#xff08;比如ChatGPT&#xff09;的便利性爱不释手&#xff0c;那么你很可能面临一个尴尬的境地&#xff1a;在终端里敲命令时&#xff0c;突然需要AI帮忙解释一段日志、…...

Faderwave合成器设计:从波形塑造到数字滤波的嵌入式音频实践

1. 项目概述&#xff1a;从推子到声音&#xff0c;Faderwave合成器的设计哲学如果你玩过硬件合成器&#xff0c;或者对数字音频合成感兴趣&#xff0c;那你肯定知道&#xff0c;声音设计的起点往往是一个简单的波形。但如何让这个波形“活”起来&#xff0c;变成你脑海中那个独…...

ESP32接入ChatGPT API:构建本地化AIoT智能交互终端

1. 项目概述&#xff1a;当ESP32遇见ChatGPT&#xff0c;开启本地化智能交互新玩法最近在捣鼓ESP32开发板&#xff0c;总想着给它加点“智能”的料。传统的物联网项目&#xff0c;比如温湿度监测、远程控制开关&#xff0c;虽然实用&#xff0c;但总觉得少了点“灵魂”。直到我…...