训练---递归与递推

2023-10-31


一、递归实现指数型枚举(递归)

任意门

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=16;
int n ;
int st[N];//状态,记录每个位置当前的状态,0表示还没考虑,1表示选他,2表示不选他

void dfs(int u)
{ 
    if(u>n)
    {
        for(int i=1;i<=n;i++)
            if(st[i]==1)
            printf("%d ",i);
        printf("\n");
        return;
    }
    st[u]=2;
    dfs(u+1);
    st[u]=0;//恢复现场

    st[u]=1;
    dfs(u+1);
    st[u]=0;//恢复现场
    return;
}



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

二、递归实现排列型枚举(递归)

任意门

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=10;
int n;
int state[N];//0表示还没放数,1-n表示放了哪个数
bool used[N];//true表示用过,false表示没有用过

void dfs(int u)
{
    if(u>n)
    {
        for(int i=1;i<=n;i++)
            printf("%d ",state[i]);
        puts("");
        return;
    }
    for(int i=1;i<=n;i++)
        if(!used[i])
    {
        state[u]=i;
        used[i]=true;
        dfs(u+1);
        state[u]=0;
        used[i]=false;
    }

}


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

三、简单斐波那契

任意门

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int f[50];
void init()
{

}
int main()
{
   int n;
   cin>>n;
   if(n<1)
    return 0;
   if(n==1)
    cout<<"0"<<endl;
   else if(n==2)
    cout<<"0 1"<<endl;
   else{
       f[1]=0;
    f[2]=1;
     cout<<"0 1";
    for(int i=3;i<=n;i++)
      {

            f[i]=f[i-1]+f[i-2];
            cout<<" "<<f[i];
      }
   }
    return 0;
}

四、费解的开关

任意门

#include <bits/stdc++.h>
using namespace std;

const int N=6;//我们这里多开一位
//是因为我们这里是用字符串来读的
//然后字符串最后有一个'\0'
char g[N][N],backup[N][N];
int dx[5]={-1,0,1,0,0},dy[5]={0,1,0,-1,0};

void turn(int x,int y)
{
    for(int i=0;i<5;i++)
    {
        int a=x+dx[i],b=y+dy[i];
        if(a<0||a>=5||b<0||b>=5)
            continue;
            g[a][b]^=1;
    }
}
int main()
{

    int t;
    cin>>t;
    while(t--)
    {
        int res=10;
        int step=0;
        for(int i=0;i<5;i++)cin>>g[i];//相当于字符串的读入,最后还有一个'\0'
       for(int op=0;op<32;op++)//因为无法根据第一行灯的亮暗来确定第一行的开关该如何操作,
    //所以才要枚举第一行的所有操作方案。
         {
             memcpy(backup,g,sizeof g);//要记录一下,保留上一个状态
             int step=0;
             for(int i=0;i<5;i++)
                if(op>>i&1)
             {
                 step++;
                 turn(0,i);
             }
               for(int i=0;i<4;i++)
                for(int j=0;j<5;j++)
                {
                    if(g[i][j]=='0')
                    {
                        step++;
                        turn(i+1,j);
                    }
                }
                bool dark=false;
                for(int i=0;i<5;i++)
                    if(g[4][i]=='0')
                {
                    dark=true;
                    break;
                }
                if(!dark)res=min(res,step);
                memcpy(g,backup,sizeof g);
         }
         if(res>6)res=-1;
          cout<<res<<endl;
    }
    return 0;
}


五、递归实现组合型枚举

任意门

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=30;
int n,m,k=1,j=0;
int state[N];//0表示还没放数,1-n表示放了哪个数
bool used[N];//true表示用过,false表示没有用过

void dfs(int u,int j)
{
    if(u>m)
    {
        for(int i=1;i<=m;i++)
            printf("%d ",state[i]);
        puts("");
        return;
    }
    for(int i=j;i<=n;i++)
        if(!used[i])
    {
        state[k++]=i;
        used[i]=true;
        dfs(u+1,i);
        state[k--]=0;
        used[i]=false;
    }

}


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

六、带分数

任意门

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int n,ans;
int st[15],backup[15];

bool check(int a,int c)
{
    long long b=n*(long long)c-a*c;
    if(!a||!b||!c)return false;
    memcpy(backup,st,sizeof(st));
    while(b)
    {
            int x=b%10;
        if(!x||backup[x])
           return false;
        backup[x]=true;
        b/=10;
    }
    for(int i=1;i<=9;i++)
    {
        if(!backup[i])
            return false;
    }
    return true;
}

void dfs_c(int a,int u,int k)
{
    if(a>9)return;
    if(check(u,k))ans++;
    for(int i=1;i<=9;i++)
    {
        if(!st[i])
        {
            st[i]=true;
            dfs_c(a+1,u,k*10+i);
            st[i]=false;
        }
    }
}

void dfs_a(int a,int u)
{
    if(u>=n)return;
    if(a)dfs_c(a,u,0);//第三位数表示c的可能值
        for(int i=1;i<=9;i++)
        if(!st[i])
           {
               st[i]=true;
                dfs_a(a+1,u*10+i);
                st[i]=false;
           }
}
int main()
{
   //n=a+b/c==>b=nc-ac
    scanf("%d",&n);
    dfs_a(0,0);//第一个数表示位数,第二个数表示数字大小
    cout<<ans<<endl;
    return 0;
}

七、飞行员兄弟

任意门

#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_set>
#include<vector>

using namespace std;

#define x first
#define y second

typedef pair<int,int>PII;
const int N=5;
char g[N][N],backup[N][N];
int get(int x,int y)
{
    return x*4+y;
}

void turn_one(int x,int y)
{
    if(g[x][y]=='+')g[x][y]='-';
    else g[x][y]='+';
}

void turn_all(int x,int y)
{
    for(int i=0;i<4;i++)
    {
        turn_one(x,i);
        turn_one(i,y);
    }
    turn_one(x,y);
}

int main()
{
    for(int i=0;i<4;i++)
        cin>>g[i];
    vector<PII>res;
    for(int op=0;op<1<<16;op++)
    {
        vector<PII>temp;
        memcpy(backup,g,sizeof g);//备份
        //进行操作
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++)
            if(op>>get(i,j)&1)
        {
            temp.push_back({i,j});
            turn_all(i,j);
        }
        //判断所有灯泡是否全亮
        bool has_closed=false;
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++)
            if(g[i][j]=='+')
            has_closed=true;
        if(has_closed==false)
            if(res.empty()||res.size()>temp.size())
            res=temp;
        memcpy(g,backup,sizeof g);
    }
    cout<<res.size()<<endl;
    for(int i=0;i<res.size();i++)
        cout<<res[i].x+1<<" "<<res[i].y+1<<endl;
    return 0;
}

七、翻硬币

任意门

#include<bits/stdc++.h>
using namespace std;

const int N=110;
char start[N],aim[N];

void turn(int x)
{
    
    if(start[x]=='*')start[x]='o';
    else start[x]='*';
}

int main()
{
    cin>>start>>aim;
    int n=strlen(start);
    int res=0;
    for(int i=0;i<n-1;i++)
    {
        if(start[i]!=aim[i])
        {
            turn(i),turn(i+1);
            res++;
        }
        
    }
    cout<<res<<endl;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

训练---递归与递推 的相关文章

  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • std::bind 重载解析

    下面的代码工作正常 include
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • debian安装dde桌面

    使用命令 sudo vi etc apt sources list d deepin git list添加以下内容 deb trusted yes arch amd64 https deepin community github io de
  • Jmap-JVM(十六)

    上篇文章说了ZGC是jdk11加入的 他是未来jvm垃圾收集器的奠定者 满足TB级别内存处理 STW时间保持在10ms以下 Jmap 我们可以先通过jmap histo 进程ip 来查看 但是这样看不太清晰 我们可以用这行命令生成一个文件
  • 理解 Pod 和容器设计模式

    本节课程要点 为什么需要 Pod Pod 的实现机制 详解容器设计模式 为什么需要 Pod 容器的基本概念 现在来看第一个问题 为什么需要 Pod 我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念 也是非常重要的一个原
  • 傅里叶分析——三角函数

    一 嘛叫频域 从我们出生 我们看到的世界都以时间贯穿 股票的走势 人的身高 汽车的轨迹都会随着时间发生改变 这种以时间作为参照来观察动态世界的方法我们称其为时域分析 而我们也想当然的认为 世间万物都在随着时间不停的改变 并且永远不会静止下来
  • synchronized锁升级详细过程

    目录 一 锁升级基础 1 偏向锁 2 轻量级锁 自旋锁 3 重量级锁 二 为什么要有锁升级过程 1 减少无竞争情况下的同步操作开销 2 尽量避免线程切换的开销 3 降低内存消耗 4 提高系统吞吐量 三 锁升级具体过程 一 锁升级基础 1 偏
  • 流程挖掘为什么已成为RPA智能自动化重要组成部分?

    流程挖掘为什么已成为RPA智能自动化重要组成部分 近年来 越来越多企业正通过部署RPA优化业务流程 保持企业的竞争优势 IDC调查发现 受调查的用户中 201家企业 35 表示 正在使用IPA中的流程挖掘功能 未来12 24个月内将有39
  • Windows下查看进程的命令行参数

    我们可以使用下面方法得到 在XP下是可以查看进程命令行参数的 使用下面的命令 wmic process get caption commandline value 如果想查询某一个进程的命令行参数 使用下列方式 wmic process w
  • no session found for current thread错误详解

    hibernate4与spring3整合时遇到no session found for current thread错误 在网上找了好多都说加上
  • three.js学习(第四天)之环境遮挡贴图与强度

    AO环境遮挡贴图 创建纹理 const textureLoader new THREE TextureLoader const doorColorTexture textureLoader load src assets textures
  • geth运行报错zsh: exec format error: ./geth

    使用 file geth 可知 原因多半是geth与对应的系统不匹配造成的 同理 AMD的mac也暂时用不了这个 可以从这里重新下载 https geth ethereum org downloads
  • Python virtualenv 虚拟环境(详细使用,包含打包 exe/app )

    一 简介 virtualenv 官网 Python 虚拟环境官方中文文档 在开发 Python 应用程序的时候 系统上通常只会安装一个 Python 版本 例如 3 7 所有使用 pip 安装的第三方包都会被安装到 Python 的 sit
  • 期货量化交易程序CTP入门指南 一

    周末综合征 周末爬山 跑步导致周一上班困的啥都不想做 正好趁这个时间写一下前两周做的一个期货网格化工具 算是给后面要入门的兄弟尽点微薄之力 虽然网上的资料已经足够多 我本对期货一无所知 仅知道 期货 二字而已 但受朋友之托开发一款网格化工具
  • 快速使用C ++保护或取消保护Word文档

    数字文档的保护一直是热门话题 就Word文档而言 MS Word提供了多种内容保护功能 这些功能限制了用户对文档的访问 您可以使用密码保护文档并应用所需的限制 以避免未经授权的访问 因此 本文将介绍如何在C 应用程序中自动执行Word文档保
  • python作业合集(三)

    作业1 猜数字游戏 电脑随机一个范围内的数 用户输入数据判断 如果数大了 提供 数大了 成功之后 加上用户是否继续功能 作业2 猜拳游戏 石头 剪刀 布的游戏 作业3
  • git设置编码

    git config global core quotepath false 显示 status 编 git config global gui encoding utf 8 图形界面编码 git config global i18n co
  • 你好,五月

    五月算是上大学以来最忙碌的一个月 因为所有事碰巧都堆到这个月了 当然也是因为这个月的存在 让我成长了许多也让我认识到原来自己可以做这么多事 人力项目 柳暗花明 人力资源项目 五一七天时间我们全天基本上是在423度过的 每天都一起在研究如何实
  • macOS查看文件路径

    当在mac系统中需要输入文件路径 快速找到文件路径 有以下2个步骤 1 点击Finder查看全部文件 shift command c 进入到磁盘界面找到需要放置的文件夹 2 打开终端输入命令 defaults write com apple
  • Ubuntu 安装 Wireshark

    Ubuntu 安装 Wireshark 概述 Wireshark 是一款图形化的网络协议分析工具 它允许你交互式地浏览实时网络或以前保存的捕获文件中的数据包数据 Wireshark 的本地捕获文件格式是 pcapng 格式 或者是 pcap
  • jsunix时间戳转换成时间

    jsunix时间戳转换成时间 js实现unix时间戳转换代码教程如下 输入一个时间 实现结果 转换成时间戳 js实现代码如下 act 鏃堕棿鎴宠浆鎹 version 1 1 author youngxj date 2018 07 01 ur
  • 训练---递归与递推

    文章目录 一 递归实现指数型枚举 递归 二 递归实现排列型枚举 递归 三 简单斐波那契 四 费解的开关 五 递归实现组合型枚举 六 带分数 七 飞行员兄弟 七 翻硬币 一 递归实现指数型枚举 递归 任意门 include