【蓝桥杯每日一题】递推算法

news2024/9/21 5:27:03

🍎 博客主页:🌙@披星戴月的贾维斯
🍎 欢迎关注:👍点赞🍃收藏🔥留言
🍇系列专栏:🌙 蓝桥杯
🌙我与杀戮之中绽放,亦如黎明的花朵🌙
🍉一起加油,去追寻、去成为更好的自己!

蓝桥杯倒计时 39天

文章目录

  • 🍎、递推
  • 🍎、例题分析
        • 🍇、(AcWing)砖块
        • 🍇、(AcWing)翻硬币
        • 🍇、(AcWing)费解的开关
  • 🍎、总结

提示:以下是本篇文章正文内容,下面案例可供参考


🍎、递推

🍉、递推的简单定义

递推算法是一种用若干步可重复运算来描述复杂问题的方法。递推是序列计算中的一种常用算法。通常是通过计算前面的一些项来得出序列中的指定项的值。

🍉、递推问题分析的四个步骤

1、确定递推变量
2、建立递推关系
3、确定初始(边界)条件
4、对递推过程进行控制

🍉、递推改变一个位置的通用模板函数

void turn(char &c)
{
    if(c == 'W') c = 'B'; //这个状态需要根据每一题题目具体分析
    else c = 'W';
}

对递归结果和测试用例的看法:有时候我们的答案和样例会不一样,这是很正常的,我们只要输出一个正确的答案就ok了。


🍎、例题分析

🍇、(AcWing)砖块

本题链接: 砖块
在这里插入图片描述在这里插入图片描述
代码示例:

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
const int N  = 203;
int t, n;
string str;
void update(char &c)
{
    if(c == 'W') c = 'B';
    else c = 'W';
}
bool cheak(char c)
{
    vector<int> res; // 存所有的方案
    string s = str; //设置s字符串拷贝原str
    for(int i = 0; i + 1 < n; i++)
    {
        if(s[i] != c)
        {
            update(s[i]);
            update(s[i + 1]);
            res.push_back(i);//说明那个位置要被操作一下,要把这个方案记录到res里
        }
    }
    if(s.back() != c) return false;
    
    cout << res.size() << endl;
    for(int x : res) cout << x + 1 << " ";
    if(res.size()) cout << endl; // 如果方案数为0,直接输出一个回车
    return true;
}
int main ()
{
    
    cin >> t;
    while(t --)
    {
        cin >> n >> str;
        if(!cheak('W') && !cheak('B')) puts("-1");
    }
    
    return 0;
}

🍇、(AcWing)翻硬币

本题链接: 翻硬币
在这里插入图片描述
分析解题思路:
在这里插入图片描述
代码示例:

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

string a, b;
void turn(char &c)
{
    if(c == 'o') c = '*';
    else c = 'o';
}
int main ()
{
    cin >> a >> b;
    int res = 0;
    for(int i = 0; i + 1<  a.size(); i++ )
    {
        if(a[i] != b[i])
        {
            turn(a[i]);
            turn(a[i + 1]);
            res++;
        }
    }
    cout << res << endl;
    
    return 0;
}

🍇、(AcWing)费解的开关

本题链接: 费解的开关
在这里插入图片描述

在这里插入图片描述
解题分析:
在这里插入图片描述代码示例:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

const int INF = 1000000;
const int N = 6;
char g[N][N], backcup[N][N];
int dx[5] = { 0, -1, 0, 1, 0}, dy[5] = { 0, 0, 1, 0, -1};
void turn(int x, int y)
{
    for(int i = 0; i < 5; i++)
    {
        int a = dx[i] + x, b = dy[i] + y;
        if(a >= 0 && a < 5 && b >= 0 && b < 5)
        {
            g[a][b] ^= 1;
        }
    }
}
int work()
{
    int ans = INF;
    for(int k = 0 ; k < 32; k++) //k从0枚举到32,是枚举每个位置对应的状态,是不是turn过
    {
        int res = 0; // 当前方案操作数的最小值
        char backcup[N][N];
        memcpy(backcup, g, sizeof g);
        for(int j = 0; j < 5; j++)//针对第一层的操作
            if(k >> j & 1) //位运算
            {
                res ++;
                turn(0, j);
            }
            
        for(int i = 0; i < 4; i++)
            for(int j = 0; j < 5; j++)
            if(g[i][j] == '0')
            {
                res++;
                turn(i + 1, j);
            }
        bool is_successful = true;
        for(int j = 0; j < 5; j++)
            if(g[4][j] == '0')
            {
                is_successful = false;
                break;
            }
        if(is_successful) ans = min(ans, res);    
        memcpy(g, backcup, sizeof g);
    }
    if(ans > 6) ans = -1;
    return ans;
    
}


int main ()
{
    int T;
    cin >> T;
    while(T--)
    {
        for(int i = 0; i < 5; i++) cin >> g[i];
        cout << work() << endl;
    }
    
    return 0;
}

🍎、总结

    本文简要介绍了递推算法的简要概念和几道递推算法的经典例题,希望大家读后能有所收获!

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

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

相关文章

Python字典-- 内附蓝桥题:统计数字

字典 ~~不定时更新&#x1f383;&#xff0c;上次更新&#xff1a;2023/02/28 &#x1f5e1;常用函数&#xff08;方法&#xff09; 1. dic.get(key) --> 判断字典 dic 是否有 key&#xff0c;有返回其对应的值&#xff0c;没有返回 None 举个栗子&#x1f330; dic …

实际案例呈现,教你如何掌握询盘细节

以下通过一个实际案例教大家如何掌握询盘细节&#xff0c;让你的回复率直线上升&#xff01; 这个朋友是从事首饰珠宝行业的&#xff0c;他在阿里巴巴上收到了一封来自摩洛哥买家的询盘&#xff0c;回复后客户就没有音讯了。 摩洛哥买家询盘内容&#xff1a; Hello sir Aft…

这么强才给我28k,我头都不回,转身拿下40k~

时间真的过得很快&#xff0c;眨眼就从校园刚出来的帅气小伙变成了油腻大叔&#xff0c;给各位刚入道的测试朋友一点小建议&#xff0c;希望你们直通罗马吧&#xff01; 如何选择自己合适的方向 关于选择测试管理&#xff1a; 第一&#xff0c;你一定不会是一个喜欢技术&…

python基础命令

1.现在包的安装路径 #pip show 包名 2.pip讲解 相信对于大多数熟悉Python的人来说&#xff0c;一定都听说并且使用过pip这个工具&#xff0c;但是对它的了解可能还不一定是非常的透彻&#xff0c;今天小编就来为大家介绍10个使用pip的小技巧&#xff0c;相信对大家以后管理和…

【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)

导语 哈喽&#xff01;大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦&#xff01; …

UI 自动化测试框架:PO 模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

用Python的Supervisor進行進程監控以及自動啓動

python 限制同一时间只执行一个 作服務器端開發的同窗應該都對進程監控不會陌生&#xff0c;最近剛好要更換 uwsgi 爲 gunicorn&#xff0c;而gunicorn又剛好有這麼一章講進程監控&#xff0c;因此多研究了下。python 結合以前在騰訊工做的經驗&#xff0c;也會講講騰訊的服務…

python+pytest接口自动化(4)-requests发送get请求

python中用于请求http接口的有自带的urllib和第三方库requests&#xff0c;但 urllib 写法稍微有点繁琐&#xff0c;所以在进行接口自动化测试过程中&#xff0c;一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。requests库简介requests 库中…

Java8 新特性强大的Stream API

一、Stream API 说明 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提供Ja…

01-Oracle入门基础知识讲解

本章内容主要是讲解Oracle基础知识&#xff0c;安装完Oracle后第一次使用所必须了解的一些常用软件及命令&#xff0c;Oracle的体系结构等知识。 一、进入SQL Plus客户端软件 1.进入SQLPLUS客户端windows界面 2.进入DOS窗口界面 普通用户登录&#xff1a;conn 用户名称/密码 …

物联网平台开发:物模型之设备影子的概念与作用

物联网平台提供设备影子功能&#xff0c;用于缓存设备上报的状态数据和应用程序下发的指令信息。设备在线时&#xff0c;可以直接获取物联网平台指令&#xff1b;设备离线后&#xff0c;再次上线可以主动拉取物联网平台指令。本文主要介绍设备影子的应用场景和使用方法。 什么…

SpringBoot整合Shiro(代码详解)

SpringBoot整合Shiro创建项目整合mybaits整合shiro整合前端html使用创建项目 最终项目结构 引入依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>…

Python第一课

目录 实例1 圆面积的计算 实例2 同切圆绘制 实例3 五角星绘制 温度转换 缩进 注释 命名与保留字 语句与函数 为什么要学习计算机编程&#xff1f;因为“编程是件很有趣的事儿”&#xff01; 编程很难学吗&#xff1f;掌握方法就很容易&#xff01; 首先&#xff0c;掌…

PHY自协商

1. 自协商定义 自动协商模式是端口根据另一端设备的连接速度和双工模式&#xff0c;自动把它的速度调节到最高的公共水平&#xff0c;即线路两端能具有的最快速度和双工模式。 自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端&#xff0c;并接受对…

2.递归算法

递归算法的两个特点&#xff08;很重要&#xff09;调用自身要有结束条件void func1(int x) {printf("%d\n", x);func1(x - 1); }func1会一直死循环&#xff0c;没有使其结束的条件&#xff0c;所以不是递归void func2(int x) {if (x > 0){printf("%d\n"…

Big_Data

Linux 计算机硬件软件体系 冯 诺依曼体系结构 计算机处理的数据和指令一律用二进制数表示 顺序执行程序 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成计算机硬件组成 输入设备输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式常见的…

做的国外网站如何让谷歌收录?Google不收录独立站怎么办?

本文主要分享如何让Google收录的外贸独立站&#xff0c;完美的解决你网站不被谷歌收录的难题。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 Google不收录我的网站怎么办&#xff1f; 答案是&#xff1a;提交谷歌蜘蛛池或者建设GP…

[SSD综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?

版权声明&#xff1a;付费作品&#xff0c;未经许可&#xff0c;不可转载前言SSD &#xff08;Solid State Drive&#xff09;&#xff0c;即固态硬盘&#xff0c;通常是一种以半导体闪存&#xff08;NAND Flash&#xff09;作为介质的存储设备。SSD 以半导体作为介质存储数据&…

【白皮书】关于Microsoft DCOM安全补丁KB5004442 (CVE-2021-26414) 对OPC Classic通信的影响及解决方案

本白皮书介绍了Microsoft DCOM安全补丁KB5004442 (CVE-2021-26414) 对现有的OPC Classic通信的影响&#xff0c;以及Softing提供的解决方案。 | 针对DCOM的Windows安全更新KB5004442 (CVE-2021-26414) 2021年6月8日&#xff0c;微软发布了针对DCOM的Windows安全更新KB5004442 …

数据合规可信计划暨国内首个数据合规标准发布!易观作为标准起草单位应邀参加

近日&#xff0c;由中国电子信息行业联合会主办的首届中国数据治理年会在北京召开&#xff0c;首届中国数据治理年会以“贯彻‘数据二十条’&#xff0c;做强做优做大我国数字经济”为主题&#xff0c;加快落实《“十四五”大数据产业发展规划》和工信部重点工作&#xff0c;进…