acwing-蓝桥杯C++ AB组辅导课Day1-递归

感谢梦翔老哥的蓝桥杯C++ AB组辅导课~

省一刷200题        国赛拿成绩300题

比赛考察的是各种模型的熟练度,可以从dfs的角度比较各个模型与当前问题的匹配程度。

常见时间复杂度,根据时间复杂度可以判别是否可以选用这个解题思路

 写递归的时候,可以考虑将递归写成递归搜索树的形式,比较便于理解:

常见的数字:

递归实现指数型枚举:

递归的思路就是找到一个顺序不重不漏的遍历所有情况。本题的思路就是遍历每个位置,考虑每个位置选或不选的情况。

ac代码:

从第0个位置开始枚举,到第n-1的位置。先写边界,边界写完可以考虑上面图中的某个节点(红圈),设置某个位置的数字后递归回溯要还原现场。

递归是怎么实现回溯的呢?看下列代码,dfs(u+1)的位置,执行到此处代码会进入到新的函数当中,当dfs(u+1)执行结束的时候,会跳转到目前执行的下一行,为了不影响“选”的决策,需要把位置设置为原来的0。建议与上面的红圈图搭配着看比较清晰。

其实本题可以不用恢复现场,并且state[u] = 0 会被state[u] = 1 和下次dfs中的status[u]=2覆盖掉,因为最后输出只在递归树的末端,此时所有的位置都是1或者2,没有0。

递归实现排列型枚举:

做递归题建议先把递归搜索树写出来,明确思路。会简单很多。

思路1:枚举每个数字放到哪个位置 ×        由于题目要求输出字典序较小的数字,模拟了一下发现不能满足题目要求。

思路2:枚举每个位置放哪个数字 √

递归搜索树

AC代码:

时间复杂度分析:

根据递归搜索树分析,第一层O(n),第二层nxn,第三层nx(n-1)xn...        视频后面还有个证明,大概是使用了放缩,将红框的内容全部加起来,提出来个n,剩余的部分可以放缩成小于等于3倍的n!。所以最终的时间复杂度为nxn!。

习题1:

递归实现组合型枚举

思路:

一开始看到这个题,感觉跟例题里的枚举每个位置放哪个数基本一致,以为稍微改一下数组大小就行。但题意要求输出升序序列。所以在这基础上需要进行剪枝,123是可以的,132就是不行的。所以在填写位置的时候,将目前已经填写的数字(3)与即将要填入的数字(2)进行比较,如果已经填写的数字大于即将填入的数字,那就不能填,再往后看看有没有合适的数。

AC代码:

#include<bits/stdc++.h>

using namespace std;

vector<int> ans;
bool state[26];

int m,n;    //m表示位置个数,n表示数字个数

void dfs(int u){//枚举位置
    
    if(u == m){
        for(int i=0;i<m;i++){
            cout<<ans[i]<<" ";
        }
        cout<<endl;
        return;
    }
    int num = -1;
    for(int i=1;i<=n;i++){
        if(ans.size()!=0){
            num = ans[ans.size()-1];
        }
        if(!state[i]&&(i>num)){
            ans.push_back(i);
            state[i] = true;
            dfs(u+1);
            ans.pop_back();
            state[i] = false;
            
        }
    }
    
    
}

int main(){
    cin>>n>>m;
    
    dfs(0);
    
    return 0;
}

习题2:带分数

自己没想出来,引用一下人家的题解(没想到竟然如此暴力):

代码如下(代码自己想着敲得):

#include<bits/stdc++.h>

using namespace std;
vector<int> ans;
bool status[10];
int cnt = 0;
int calc(int i,int j){
    int num = ans[i];
    while(i<j){
        i++;
        num = num*10 + ans[i];
    }
    return num;
}

void dfs(int u,int target){
    if(u == 9){
        //对ans进行处理,走到这里正好凑够9位
        for(int i=0;i<7;i++){    //这里注意循环到7
            for(int j = i+1;j<8;j++){    //这里注意循环到8 不然没有c这个数了
                int a = calc(0,i);
                // printf("%d",a);  wc加了个printf就超时了
                int b = calc(i+1,j);
                int c = calc(j+1,8);
                if((a*c+b) == (target * c)) cnt++;
            }
        }
        return;
    }
    for(int i=1;i<=9;i++){
        if(!status[i]){
            ans.push_back(i);
            status[i] = true;
            dfs(u+1,target);
            status[i] = false;
            ans.pop_back();
        }
    }
}


int main(){
    int n;
    scanf("%d",&n);
    dfs(0,n);
    printf("%d",cnt);
    return 0;
}


 

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

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

相关文章

11 月公链盘点:Solana 强势复苏,Blast 飞速崛起,Web3 游戏市值猛涨

作者&#xff1a;stellafootprint.network 11 月的加密市场充满了重大事件&#xff0c;从比特币 ETF 的热议到币安 40 亿美元的和解&#xff0c;均获得了极大的关注。在以太坊继续主导 TVL 和像 Arbitrum 这样的 Layer 2 成为焦点的同时&#xff0c;我们也见证了 Solana 引人注…

【vue3】处理数组方法,在数组中获取指定条件所在的数组对象等持续更新笔记~~

1、在数组中获取指定条件所在的数组对象 &#xff08;1&#xff09;filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印&#xff1a; &#xff08;2&#xff09;map方法取到的是包含指定项的数组&#xff0c;如果满足…

全志V3s之应用层点灯

1、全志V3s的管脚控制简介&#xff1a; 全志V3s一共有5个端口可以作为输入输出&#xff0c;其数量如图所示&#xff1a; 端口的基地址为&#xff1a;PIO &#xff1a; 0x01c20800。其中&#xff0c;每个端口都有自己的偏移地址&#xff0c;其偏移计算公式如表所示&#xff1a…

业务代码-整合框架-存储-缓存常见错误详解一

一. java空指针和异常&#xff1a; 1.什么是空指针异常&#xff08;java.lang.NullPointException)&#xff1a; 1.1常见的空指针异常案例&#xff1a; public class WhatIsNpe {public static class User {private String name;private String[] address;public void print…

有监督学习、无监督学习、半监督学习和强化学习

有监督学习 训练数据有标签 无监督学习 数据是没有标签的 聚类的思想&#xff1a;通过计算空间中的距离来判断是否属于同一类 强化学习 和环境交互&#xff0c;从环境中学习 三者对比 半监督学习 少量有标注&#xff0c;大量无标注 三个假设 1.连续性/平滑性假设:相…

关于对RF射频方面性能要求各有不同

1.1 射频天线性能 对于一个射频设备每个公司对其合格指标要求都不一&#xff0c;有些公司注重于阻抗及电压驻波&#xff0c;有些公司注重与回波损耗及阻抗、有些只关注电压驻波。 1.2 射频的目的 其实射频天线的目的就是在不把无用的杂散放大超标准的前提下&#xff0c;把有用…

Nature 确认:大语言模型只是没有感情的「学人精」

DeepMind、EleutherAI 科学家提出&#xff0c;大模型只是在角色扮演。 ChatGPT 爆火后&#xff0c;大语言模型一跃而至&#xff0c;成为了行业与资本的宠儿。而在人们或是猎奇、或是探究地一次次对话中&#xff0c;大语言模型所表现出的过度拟人化也引起了越来越多的关注。 其实…

使用FluentAvalonia组件库快速完成Avalonia前端开发

前言 工欲善其事必先利其器,前面我们花了几篇文章介绍了Avalonia框架以及如何在Avalonia框架下面使用PrismAvalonia完成MVV模式的开发。今天我们将介绍一款重磅级的Avalonia前端组件库,里面封装了我们开发中常用的组件,这样就不用我们自己再写组件了。专注业务功能开发,提…

SpringBoot类文件具有错误的版本 61.0, 应为 55.0

4.SpringBoot入门案例 每一个从你生命中路过的人&#xff0c;都在教你成长&#xff0c;感恩的心&#xff0c;感谢一程陪伴&#xff0c;感谢曾经有你spring learn https://spring.io/projects/spring-boot#learn Getting Started Developing Your First Spring Boot Applicati…

Tcon基础知识

1、TCON&#xff0c;就是 Timing Controller 的缩写。从主芯片输出的要在 TFT 显示屏上显示的数据&#xff0c;在经过 TCON 模块后可以变换生成 Panel 可以直接利用的 DATA 信号和驱动器&#xff08;包括 source driver 和 gate driver&#xff09;的控制信号。 TV 市场上 TCO…

超声波测距HC-SR04模块的简单应用

文章目录 一、HC-SR04HC-SR04是什么&#xff1f;HC-SR04测距的原理 二、使用步骤1.硬件最远探测距离调节硬件连接 2.软件1.初始化配置代码如下&#xff08;示例&#xff09;&#xff1a;引脚初始化定时器初始化 2.引脚输入输出配置代码如下&#xff08;示例&#xff09;&#x…

OfficeWeb365 SaveDraw 文件上传漏洞复现

0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 Sav…

基于Leaflet的Webgis经纬网格生成实践

目录 前言 一、Leaflet.Graticule 1、参数说明 二、集成使用 1、新建网页模板 2、初始化地图对象 3、运行效果 三、源码调用分析 1、参数注入 2、经纬网构建 总结 前言 众所周知&#xff0c;在地球仪上或地图上&#xff0c;经线和纬线相互交织&#xff0c;就构成经纬…

揭示 ETL 系统架构中的 OLAP、OLTP 和 HTAP

探索 ETL 系统设计需要了解 OLAP、OLTP 和不断发展的 HTAP。让我们试图剖析这些范式的复杂性。 1. OLAP&#xff08;联机分析处理&#xff09;&#xff1a; OLAP 是商业智能的中流砥柱&#xff0c;通过 OLAP 立方体进行多维数据分析。这些立方体封装了预先聚合、预先计算的数据…

31、应急响应——Windows

文章目录 一、账户排查1.1 登录服务器的途径1.2 弱口令1.3 可疑账号 二、网络排查三、进程排查四、注册表排查五、内存分析 一、账户排查 1.1 登录服务器的途径 3389smb 445httpftp数据库中间件 1.2 弱口令 弱口令途径&#xff1a;3389、smb 445、http、ftp、数据库、中间件…

双指针的运用——双数之和II和三数之和

两数之和 https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/ 我们考虑这个排序过的数组&#xff0c;首先一个指针在最左&#xff0c;一个在最右。如果这两个数字比目标数字来的要小&#xff0c;那么如果我们左边指针移动了&#xff0c;移动后一定变…

【LeetCode刷题】-- 163.缺失的区间

163.缺失的区间 class Solution {public List<List<Integer>> findMissingRanges(int[] nums, int lower, int upper) {List<List<Integer>> res new ArrayList<>();for(int num : nums){if(lower < num){res.add(Arrays.asList(lower,num -…

计算机网络:数据链路层(介质访问控制)

欢迎关注大家关注我的公众号&#xff1a;浩泽学编程&#xff1b;联系我&#xff0c;一起交流学习&#xff0c;也可以解答你的迷茫。 目录 前言 一、静态划分信道&#xff08;信道划分介质访问控制&#xff09; 1、频分多路复用FDM 2、时分多路复用TDM 3、波分多路复用WDM …

基于单片机智能自动浇花系统设计

**单片机设计介绍&#xff0c;基于单片机智能自动浇花系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能自动浇花系统是一种可以自动感知周围环境&#xff0c;并执行相应动作的系统。通过使用传感器检测土…

微服务--07--Sentienl中使用的限流算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Sentienl中使用的限流算法1、计数器固定窗口算法2、计数器滑动窗口算法----&#xff08;默认&#xff09;3、漏桶算法----&#xff08;排队等待&#xff09;4、令牌…