Acwing 蓝桥杯 第一章 递归与递推

news2024/11/24 14:56:28

我上周在干什么,感觉我上周啥也没训,本来两天一次的vp也没v

很寄啊,再这样下去真不行了

先总结一下如何爆搜:

先去确定好枚举的对象

枚举的对象很重要!!这直接影响了复杂度

然后就是去想递归树就好了

一、确定状态:

状态分为全局变量和局部变量

考虑状态时去考虑三样东西:

  1. 阶段(即深度),阶段作为出口

  1. 影响决策的因素(全局or局部)

  1. 要维护的答案

二、枚举决策+加限定条件

三、确定出口(根据阶段)

那么我们怎么去考虑复杂度:考虑每一层树的结点个数*每个结点的复杂度

92. 递归实现指数型枚举 - AcWing题库

思路:

一、先去确定状态:

  1. 阶段就是深度,即选了几个数了

  1. 决策就是选与不选,没东西影响决策

  1. 开个全局数组记录答案即可

因此状态就是dfs(x)

二、枚举决策:选or不选

三、确定出口:深度>n

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=3e6+10;
const int mxe=2e5+10;
using namespace std;
vector<int> v;
int n;
int vis[mxn];
void print(){
    for(int i=0;i<v.size();i++) cout<<v[i]<<" \n"[i==v.size()-1];
}
void dfs(int u){
    if(u>n){
        print();
        return;
    }
    v.push_back(u);
    dfs(u+1);
    v.pop_back();

    dfs(u+1);
}
void solve(){
    cin>>n;
    dfs(1);
    cout<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

AcWing 94. 递归实现排列型枚举 - AcWing

一、设状态:

  1. 阶段:深度,即选了几个数

  1. 影响决策的因素:只能选没选过的数:开个全局vis

  1. 记录答案:开个全局数组记录答案

二、枚举决策:

1~n,然后不选vis[i]=1的就行

三、出口:

深度>n

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=3e6+10;
const int mxe=2e5+10;
using namespace std;
vector<int> v;
int n;
int vis[mxn];
void print(){
    for(int i=0;i<v.size();i++) cout<<v[i]<<" \n"[i==v.size()-1];
}
void dfs(int u){
    if(u>n){
        print();
        return;
    }
    for(int i=1;i<=n;i++){
        if(!vis[i]){
            v.push_back(i);
            vis[i]=1;
            dfs(u+1);
            vis[i]=0;
            v.pop_back();
        }
    }
}
void solve(){
    cin>>n;
    dfs(1);
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

93. 递归实现组合型枚举 - AcWing题库

一、确定状态:

  1. 阶段:即深度,选不超过m个数

  1. 影响决策的因素:每次选比上次选的数大的,因此要记录上次选的数

  1. 记录结果:开个全局数组就行了

因此状态就是dfs(u,last),第二维是上次选的数

二、枚举决策:

从last+1开始枚举即可,不用开vis数组,不会重复

三、出口:

选了>m个数

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=3e6+10;
const int mxe=2e5+10;
using namespace std;



int n,m,len=0;
int vis[mxn],a[mxn];
void print(){
    for(int i=1;i<=len;i++) cout<<a[i]<<" \n"[i==len];
}
void dfs(int u,int last){
    if(u>m){
        print();
        return;
    }
    for(int i=last+1;i<=n;i++){
        if(!vis[i]){
            vis[i]=1;
            a[++len]=i;
            dfs(u+1,i);
            len--;
            vis[i]=0;
        }
    }
}
void solve(){
    cin>>n>>m;
    dfs(1,0);
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

AcWing 1209. 带分数 - AcWing

枚举对象:先去枚举全排列,然后枚举两个指针隔起来,验证正确性就好了,不需要dfs爆搜

有个细节就是:不要用substr,写个函数更清晰

Code:

#include <bits/stdc++.h>
//#define int long long
const int mxn=3e6+10;
const int mxe=2e5+10;
using namespace std;


int n;
string s="123456789";
bool check(int x1,int x2,int x3){
    if(x2%x3==0&&x1+x2/x3==n) return true;
    return false;
}
int trans(int l,int r){
    int res=0;
    for(int i=l;i<=r;i++){
        res=res*10+(s[i]-'0');
    }
    return res;
}
void solve(){
    int ans=0;
    cin>>n;
    do{
        for(int i=0;i<9;i++){
            for(int j=i+1;j<9;j++){
                int a1=trans(0,i);
                int a2=trans(i+1,j);
                int a3=trans(j+1,8);
                if(a1==0||a2==0||a3==0) continue;
                if(check(a1,a2,a3)) ans++;
            }
        }
    }while(next_permutation(s.begin(),s.end()));
    cout<<ans<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

AcWing 1208. 翻硬币 - AcWing

思路:

这是典中典,第一个是确定的,因此只需递推过去就好了

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=3e6+10;
const int mxe=2e5+10;
using namespace std;


string s,t;
void solve(){
    cin>>s>>t;
    int cnt=0;
    for(int i=0;i<s.size();i++){
        if(s[i]!=t[i]){
            cnt++;
            if(s[i]=='*') s[i]='o';
            else s[i]='*';

            if(s[i+1]=='o') s[i+1]='*';
            else s[i+1]='o';
        }
    }
    cout<<cnt<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

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

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

相关文章

基于VSG的预同步并离网控制MATLAB仿真模型

MATLAB2019b主要模块&#xff1a;并网逆变器VSG控制预同步控制电流电流双环控制锁相环、三相准PR控制、PWM0.65秒开始并网运行&#xff01;&#xff01;&#xff01;仿真模型&#xff1a;逆变器输出电压、电流波形。电压为单相&#xff08;可观察相位情况&#xff09;&#xff…

【逐步剖C】-第八章-指针进阶-下

前言&#xff1a;在文章【逐步剖C】-第八章-指针进阶-上与指针初阶中我们介绍了有关指针较为全面的知识&#xff0c;本篇文章主要从指针和数组相关试题出发&#xff0c;进一步巩固对指针的学习。接下来&#xff0c;让我们开始吧。 一、“真假”数组名 前言&#xff1a;这一部…

【每日一题】集合汇总 集合面试题

集合前言&#xff1a;图片一、集合分类1、实现 Collection 接口2、实现 Map 接口二、实现类定义1、ArrayList&#xff08;非线程安全&#xff09;2、LinkedList&#xff08;非线程安全&#xff09;3、HashSet&#xff08;非线程安全&#xff09;4、TreeSet&#xff08;非线程安…

Linux学习(8.6)文件与目录的默认权限与隐藏权限

目录 文件与目录的默认权限与隐藏权限 文件的默认权限&#xff1a;umask chattr (配置文件隐藏属性) lsattr (显示文件隐藏属性) 文件特殊权限&#xff1a; SUID, SGID, SBIT 观察文件类型&#xff1a;file 以下内容转载自鸟哥的Linux私房菜 文件与目录的默认权限与隐藏权…

比特数据结构与算法(第四章_中_续①)堆排序(详解)

本篇讲讲八大排序之一的&#xff1a;堆排序 概念复习&#xff1a;比特数据结构与算法&#xff08;第四章_上&#xff09;树和二叉树和堆的概念及结构_GR C的博客-CSDN博客一、堆排序的概念堆排序&#xff08;Heapsort&#xff09;&#xff1a;利用堆积树&#xff08;堆&#xf…

【博学谷学习记录】超强总结,用心分享 | 架构师 Tomcat源码学习总结

文章目录TomcatTomcat功能需求分析Tomcat两个非常重要的功能&#xff08;身份&#xff09;Tomcat的架构&#xff08;设计实现&#xff09;连接器的设计连接器架构分析核心功能ProtocolHandler 组件1.EndPoint组件EndPoint类结构图2.Processor组件Processor类结构图3.Adapter组件…

3.2 网站图的爬取路径

深度优先与广度优先方法都是遍历树的一种方法&#xff0c;但是网站的各个网页 之间的关系未必是树的结构&#xff0c;它们可能组成一个复杂的图形结构&#xff0c;即有回路。如果在前面的网站中每个网页都加一条Home的语句&#xff0c;让每个网页都能回到主界面&#xff0c;那么…

windows服务器实用(4)——使用IIS部署网站

windows服务器实用——IIS部署网站 如果把windows服务器作为web服务器使用&#xff0c;那么在这个服务器上部署网站是必须要做的事。在windows服务器上&#xff0c;我们一般使用IIS部署。 假设此时前端给你一个已经完成的网站让你部署在服务器上&#xff0c;别人可以在浏览器…

【Linux】-- 基于阻塞队列的生产者消费者模型

目录 前言 总结&#xff1a; 第一个问题的解决 基于BlockingQueue的生产者消费者模型 第二个问题的解决 wait的唤醒漏洞 深度理解生产者消费者模型 代码体现 锁的设计 总结&#xff1a; 前言 在多线程的条件变量遗留到此的问题。 #问&#xff1a;条件满足时&#xff0…

linux 防火墙管理-firewalld

什么是Firewalld 当前很多linux系统中都默认使用 firewalld&#xff08;Dynamic Firewall Manager of Linux systems&#xff0c;Linux系统的动态防火墙管理器&#xff09;服务作为防火墙配置管理工具。 “firewalld”是firewall daemon。它提供了一个动态管理的防火墙&#x…

Java知识复习(五)JVM虚拟机

1、虚拟机的自动内存管理和C/C的区别 C/C开发程序时需要为每一个new操作去写对应的delete/free操作&#xff0c;不容易出现内存泄漏和溢出问题。而Java程序将内存控制权交给了Java虚拟机 2、JVM的运行机制 1、Java程序的具体运行过程如下&#xff1a; Java源文件被编译器编…

c盘爆满--如何清理电脑C盘

问题 c盘饱满很多天了&#xff0c;今天终于忍无可忍&#xff0c;开始展开对c盘的处理 c盘的基本处理有两步&#xff0c; 第一步&#xff0c;电脑系统清理 1,c盘右键属性&#xff0c;有个磁盘清理&#xff0c;好像是系统更新的一些缓存资源&#xff0c;可以直接清理 当然这只…

Hadoop MapReduce

目录1.1 MapReduce介绍1.2 MapReduce优缺点MapReduce实例进程阶段组成1.3 Hadoop MapReduce官方示例案例&#xff1a;评估圆周率π&#xff08;PI&#xff09;的值案例&#xff1a;wordcount单词词频统计1.4 Map阶段执行流程1.5 Reduce阶段执行流程1.6 Shuffle机制1.1 MapReduc…

BigScience bloom模型

简介项目叫 BigScience,模型叫 BLOOM,BLOOM 的英文全名代表着大科学、大型、开放科学、开源的多语言语言模型。拥有 1760 亿个参数的模型.BLOOM 是去年由 1000 多名志愿研究人员,学者 在一个名为“大科学 BigScience”的项目中创建的.BLOOM 和今天其他可用大型语言模型存在的一…

信号的FFT变换与加窗

1. fft 傅里叶变换 1.1 傅里叶变换的本质 数学上有一种公式叫做 泰勒展开&#xff1a; 泰勒公式&#xff1a; 其表达的思想&#xff0c;是任意一函数可以有多个指数函数构成 当指数函数的个数趋近于无穷多个&#xff0c;那么组合出来的函数将会逼近原函数&#xff1b; …

Pandas数据查询

Pandas数据查询 Pandas查询数据的几种方法 df.loc方法&#xff0c;根据行、列的标签值查询 df.iloc方法&#xff0c;根据行、列的数字位置查询 df.where方法 df.query方法 .loc既能查询&#xff0c;又能覆盖写入&#xff0c;强烈推荐&#xff01; Pandas使用df.loc查询数据…

深度学习基础(二)-学习是怎么个回事

深度学习基础(一) 引入了一个 helloworld&#xff0c;提出了神经网络的简单关系&#xff0c;也就是一个基础公式 a(L) Sigmoid( a(L-1)*W(L) b(L)) a(L): 第L层神经元被激活之后 进行Sigmoid函数收敛 得到的值 b(L): 第L层神经元被激活阈值 W(L): 第L层神经元 与 第L-1层…

Android安卓中jni封装代码打包为aar

前文【Android安卓中jni与Java之间传递复杂的自定义数据结构】已经介绍jni编译c++代码且已经成功封装成java,但是c++是以源代码形式继承在app中,本文介绍如何将前述jni c++代码以隐藏源代码封装成aar的形式。 1、aar打包 1.1、新建module 按照流程 File -> New Module …

学习周报2.26

文章目录前言文献阅读摘要方法结果深度学习Encoder-Decoder&#xff08;编码-解码&#xff09;信息丢失的问题Attention机制总结前言 This week,I read an article about daily streamflow prediction.This study shows the results of an in-depth comparison between two di…

Oracle-RAC集群主机重启问题分析

问题背景: 在对一套两节点Oracle RAC19.18集群进行部署时&#xff0c;出现启动数据库实例就会出现主机出现重启的情况&#xff0c;检查发现主机重启是由于节点集群被驱逐导致​。 问题: 两节点Oracle RAC19.18集群,启动数据库实例会导致主机出现重启。 问题分析: 主机多次出现…