递归和递推

文章目录

  • 数楼梯
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • [NOIP2002 普及组] 过河卒
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • [NOIP2003 普及组] 栈
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示

在这里插入图片描述

数楼梯

题目描述

楼梯有 N N N 阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

输入格式

一个数字,楼梯数。

输出格式

输出走的方式总数。

样例 #1

样例输入 #1

4

样例输出 #1

5

提示

  • 对于 60 % 60\% 60% 的数据, N ≤ 50 N \leq 50 N50
  • 对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 5000 1 \le N \leq 5000 1N5000
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>

using namespace std;

#define maxn 1700

struct Bigint {
    int len, a[maxn];
    Bigint(int x = 0) {
        memset(a, 0, sizeof(a));
        for (len = 1; x; len++)
            static_cast<void>(a[len] = x % 10), x /= 10;
        len--;
    }
    int& operator[](int i) {
        return a[i];
    }
    void flatten(int L) {
        len = L;
        for (int i = 1; i <= len; i++) {
            a[i + 1] += a[i] / 10;
            a[i] %= 10;
        }
        for (;  !a[len];) len--;
    }
    void print() {
        for (int i = max(len, 1); i >= 1; i--)
            printf("%d", a[i]);
    }
};

Bigint operator+(Bigint a, Bigint b) {
    Bigint c;
    int len = max(a.len, b.len);
    for (int i = 1; i <= len; i++)
        c[i] += a[i] + b[i];
    c.flatten(len + 1);
    return c;
}

int main() {
    int N;
    cin >> N;
    Bigint f[5010];
    f[1] = Bigint(1);
    f[2] = Bigint(2);
    for (int i = 3; i <= N; i++)
        f[i] = f[i - 2] + f[i - 1];
    f[N].print();
    return 0;
}

[NOIP2002 普及组] 过河卒

题目描述

棋盘上 A A A 点有一个过河卒,需要走到目标 B B B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C C C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示, A A A ( 0 , 0 ) (0, 0) (0,0) B B B ( n , m ) (n, m) (n,m),同样马的位置坐标是需要给出的。

现在要求你计算出卒从 A A A 点能够到达 B B B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式

一行四个正整数,分别表示 B B B 点坐标和马的坐标。

输出格式

一个整数,表示所有的路径条数。

样例 #1

样例输入 #1

6 6 3 3

样例输出 #1

6

提示

对于 100 % 100 \% 100% 的数据, 1 ≤ n , m ≤ 20 1 \le n, m \le 20 1n,m20 0 ≤ 0 \le 0 马的坐标 ≤ 20 \le 20 20

【题目来源】

NOIP 2002 普及组第四题

#include <iostream>
#define NAXN 22
using namespace std;
  
int ctrl[NAXN][NAXN];
int n, m, hx, hy;
long long f[NAXN][NAXN] = {0};
int dx[9][2] = {{0,0},{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
//马的控制范围相对于马位置的偏移
  
int main(){
    cin >> n >> m >> hx >> hy;
    for (int i = 0; i < 9; i++){
        int tmpx = hx + dx[i][0];
        int tmpy = hy + dx[i][1];
        //判断在棋盘范围内
        if (tmpx >= 0 && tmpx <= n && tmpy >= 0 && tmpy <= m){
            ctrl[tmpx][tmpy]=1;//记录马的控制点
        }
    }
    f[0][0] = 1 - ctrl[0][0];  //若原点就是马控制点,则初始路径数量就是0,否则是1
    for (int i = 0; i <= n; i++){
        for (int j = 0; j <= m; j++){
            if(ctrl[i][j]) continue;//若这个点是控制点,则跳过
            if (i != 0) f[i][j] += f[i - 1][j]; //若不在横轴上,上面路径数加上
            if (j != 0) f[i][j] += f[i][j - 1]; //若不在纵轴上,左边路径数加上
        }
    }
    cout << f[n][m];//输出答案
    return 0;
}

[NOIP2003 普及组] 栈

题目背景

栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。

栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。

栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。

题目描述

宁宁考虑的是这样一个问题:一个操作数序列, 1 , 2 , … , n 1,2,\ldots ,n 1,2,,n(图示为 1 到 3 的情况),栈 A 的深度大于 n n n

现在可以进行两种操作,

  1. 将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的 push 操作)
  2. 将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的 pop 操作)

使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由 1 2 3 生成序列 2 3 1 的过程。

(原始状态如上图所示)

你的程序将对给定的 n n n,计算并输出由操作数序列 1 , 2 , … , n 1,2,\ldots,n 1,2,,n 经过操作可能得到的输出序列的总数。

输入格式

输入文件只含一个整数 n n n 1 ≤ n ≤ 18 1 \leq n \leq 18 1n18)。

输出格式

输出文件只有一行,即可能输出序列的总数目。

样例 #1

样例输入 #1

3

样例输出 #1

5

提示

【题目来源】

NOIP 2003 普及组第三题

#include<cstdio>

using namespace std;

int main(){
    int n,h[20]={1,1};
    scanf("%d",&n);
    for(int i=2;i<=n;i++)
        for(int j=0;j<i;j++)
            h[i] += h[j]*h[i-j-1];
    printf("%d",h[n]);
    
    return 0;
}

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

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

相关文章

MySQL单表过大、主从模式、同步模式优化原理

文章目录 MYSQL单表数据达2000万性能严重下降?前言InnoDB索引数据结构B树 Sharding Sphere分库分表Sharding-JDBCSharding-JDBC的相关概念说明逻辑表广播表绑定表 Sharding-JDBC中的分片策略自动分片算法取模分片算法哈希取模分片算法分片容量范围标准分片算法行表达式分片算法…

i5、i9被取消,intel第一代酷睿Ultra CPU规格出炉

早在今年 6 月&#xff0c;Intel 就公布了即将带来全新一代酷睿 Ultra CPU。 纵观 Intel CPU 历史上的数次改名&#xff0c;几乎每次都代表了产品大变革&#xff0c;性能也是跟着跨越性地水涨船高。 而如今再次抛弃沿用长达十多年的酷睿 i 系改名为酷睿 Ultra&#xff0c;似乎…

kgm格式怎么转换为mp3?这样操作真的很简单!

kgm格式是一种酷狗音乐的音频格式&#xff0c;是酷狗为了保护音乐版权而专门创建的一种加密格式。这种格式只能在酷狗音乐播放器上面播放&#xff0c;那么如何把他转换成兼容性更高的MP3音频格式呢&#xff1f;下面介绍了三种常用的方法。 方法一&#xff1a;野葱视频转换器 1…

说说 Real DOM 和 Virtual DOM 的区别?优缺点?

一、是什么 Real DOM&#xff0c;真实 DOM&#xff0c;意思为文档对象模型&#xff0c;是一个结构化文本的抽象&#xff0c;在页面渲染出的每一个结点都是一个真实 DOM 结构&#xff0c;如下&#xff1a; Virtual Dom&#xff0c;本质上是以 JavaScript 对象形式存在的对 DOM …

[每周一更]-(第71期):DevOps 是什么?

Wiki的解释&#xff1a; DevOps&#xff08;Development和Operations的混成词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#xff09;”之间沟通合作的文化、运动或惯例。 通过自动化“软件交付”和“架构变更”的…

AR工业眼镜:智能化生产新时代的引领者!!

科技飞速发展&#xff0c;人工智能与增强现实&#xff08;AR&#xff09;技术结合正在改变生活工作方式。AR工业眼镜在生产领域应用广泛&#xff0c;具有实时信息展示、智能导航定位、远程协作培训、智能安全监测等功能&#xff0c;提高生产效率、降低操作风险&#xff0c;为企…

网络安全(黑客)-高效自学

首先给大家简单介绍一下网络安全&#xff1a; 1.什么是网络安全&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、…

Netty入门指南之NIO Channel详解

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Channe…

一天获4奖!大势智慧荣获2023测绘科学技术奖一等奖、地理信息科技进步奖一等奖、测绘科技创新优秀单位、地理信息产业最具成长性企业

11月9日&#xff0c;第一届中国测绘地理信息大会暨北斗应用博览会颁奖仪式在德清国际展览中心重磅揭幕。 大势智慧凭借《空天地多源融合实景三维建模关键技术及工具体系》项目斩获“2023年测绘科学技术奖一等奖” 凭借《大型复杂文化遗产多尺度精细化三维建模关键技术与应用》…

HBuilderX 运行Android App项目至雷电模拟器

一、下载安装HBuilderX HBuildeX官网 安装最新的正式版&#xff0c;或者点击历史版本查看更多版本&#xff1b;【ps&#xff1a;Alpha版本为开发版&#xff0c;功能更多&#xff0c;但是也不稳定&#xff0c;属于测试版本】 直接将压缩包解压&#xff0c;运行HBuildeX即可。 二…

供应原厂电流继电器 - HBDLX-21/3 整定电流范围0.1-1.09A AC220V

HBDLX系列型号&#xff1a; HBDLX-20/1零序过电压继电器&#xff1b;HBDLX-20/2零序过电压继电器 HBDLX-20/3零序过电压继电器&#xff1b;HBDLX-20/4零序过电压继电器 HBDLX-20/5零序过电压继电器&#xff1b;HBDLX-21/1零序过电压继电器 HBDLX-21/2零序过电压继电器&#xf…

清华陆向谦教授提到的纽约时报的一篇文章-探讨学历贬值

文章内容来自&#xff1a; https://www.nytimes.com/2017/11/01/education/edlife/stem-jobs-industry-careers.html By Steve Lohr Nov. 1, 2017 阅读简体中文版閱讀繁體中文版 The national priority in education can be summed up in a four-letter acronym: STEM. And…

【Git】GUI图形化界面的使用SSH协议IDEA集成Git

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Git的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. GUI图形化界面的使用 1.使用Gui​ 2.常…

WPS的JS宏基础(四)——运算符

1、算术运算符 运算符是在编写代码时&#xff0c;最常用的符号。从本节课开始&#xff0c;运算符主要分为&#xff1a;算术运算符、连接运算符、比较运算符、逻辑运算符、赋值运算符等。我们将讲解这些常见的运算符&#xff0c;本节课讲解的是算术运算符。 符号作用加-减*乘/…

Windows系统Python语言环境下通过SDK进行动作捕捉数据传输

NOKOV度量动作捕捉系统可以与市面上主流的操作系统和编程语言实现通信。可以在Windows系统Python语言环境下通过SDK进行动作捕捉数据传输。 一、形影软件设置 1、切换到后处理模式 2、加载一段刚体数据 3、打开软件设置 4、将网卡地址选择为10.1.1.198 5、勾选上"使用SD…

Linux arm64异常简介和系统调用过程

文章目录 一、异常简介1.1 Exception levels1.2 异常类型 二、系统调用简介2.1 SVC指令2.2 VBAR2.3 系统调用保存现场2.4 系统调用返回 三、Linux 内核分析参考资料 一、异常简介 在ARM64体系架构中&#xff0c;异常是处理器在执行指令时可能遇到的不寻常情况或事件。这些异常…

实现智慧工地的高效建筑管理,数据分析起着关键作用!

智慧工地是利用物联网、云计算、大数据等技术&#xff0c;实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式。 智慧工地架构&#xff1a; 1、终端层&#xff1a;充分利用物联网技术、移动应用、智能硬件设备提高现场管控能力。通过RFID、传感器、摄像头、手机等终端…

银行电子回单p图软件,建设农业邮政工商招商,易语言回执单快照截图

这次分享的还是通过易语言的画板自动绘画一个回执单的功能&#xff0c;套用的是网上一个回执单模版&#xff0c;我加了水印&#xff0c;防止被别有用心的人利用&#xff0c;然后一共我插入了5个图片资源&#xff0c;单选框选定后画板上面的图片会自动被替换为对应的图片模版&am…

Qframework 中超级方便的kitres

using QFramework; using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestResKit : MonoBehaviour {ResLoader mResLoader ResLoader.Allocate();private void Awake(){}/// <summary>/// 每一个需要加载资源的单元(脚本,界…

机器学习——朴素贝叶斯

目录 一、贝叶斯方法 背景知识 贝叶斯公式 二、朴素贝叶斯原理 判别模型和生成模型 1&#xff0e;朴素贝叶斯法是典型的生成学习方法 2&#xff0e;朴素贝叶斯法的基本假设是条件独立性 3&#xff0e;朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测 用于文…
最新文章