当前位置: 首页 > article >正文

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)

目录

写在前面:

题目:P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述:

输入格式:

输出格式:

输入样例:

输出样例:

解题思路:

代码:

AC !!!!!!!!!!

写在最后:


写在前面:

怎么样才能学好一个算法?

我个人认为,系统性的刷题尤为重要,

所以,为了学好深度优先搜索,为了用好暴搜应对蓝桥杯,

事不宜迟,我们即刻开始刷题!

题目:P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述:

输入格式:

一个整数 n ( 1 ≤ n ≤ 24 )。

输出格式:

一个整数,能拼成的不同等式的数目。

输入样例:

1. 

14

2. 

18

输出样例:

1. 

2

2. 

9

解题思路:

我们使用深度优先搜索的时候,

第一个要注意的点是搜索的顺序,

因为我们要保证,

我们写出的递归结构能够遍历所有情况

在我们初学搜索的时候,我们一定要画一个递归搜索树观察,

递归非常抽象,画图能很好的帮助我们解题。(以上递归搜索的基本思路,多熟悉总是好的)

 接下来是具体思路

根据题意可知:

 这样,我们可以把它想象成,

在ABC这三个位置上填数字,

满足A+B=C以及A+B+C的火柴数等于n-4

那我们根据这个思路来画递归搜索数:

根节点:

往第一个位置填数字:

 继续往下递归搜索,

我们发现其实这是一个指数型的枚举:

 我们继续往下搜索:

以此类推,我们能够搜索出所有的情况,

然后再根据题意进行判断和剪枝:

剪枝:

如果A或者A+B的火柴数已经大于题目要求的n

就直接return,也就是剪枝。

接下来看代码:

代码:

//包常用头文件
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

//题目n最大是24,如果不确定该开多大,那就开大点
const int N = 10010;

int n;

//计数最后输出
int res = 0;

int st[N];

//各个数字的火柴数
int match[10010] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };

void dfs(int u, int sum)
{
    //如果A或者A+B的火柴数已经大于题目要求的n,剪枝
    if(sum > n)
    return;
    
    if (u > 3)
    {
        //满足A+B=C以及A+B+C的火柴数等于n-4
        if (st[1] + st[2] == st[3] && sum == n - 4)
        {
            res++;
        }
        return;
    }
    
    //搜索
    for (int i = 0; i < 1000; i++)
    {
        st[u] = i;
        dfs(u + 1, sum + match[i]);
        st[u] = 0;
    }
}

int main()
{
    scanf("%d", &n);
    
    //递推取得每个数字的火柴数
    for(int i = 10; i < 1000; i++)
    {
        match[i] = match[i / 10] + match[i % 10];
    }
    dfs(1, 0);
    printf("%d", res);
    return 0;
}

AC !!!!!!!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。


http://www.kler.cn/a/2016.html

相关文章:

  • 微服务——技术选型与框架
  • 面向对象编程:原理、实践与应用
  • 文件解析漏洞中间件(iis和Apache)
  • tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录
  • Oracle:数据库的顶尖认证
  • Swin transformer 论文阅读记录 代码分析
  • 100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)
  • python网上选课系统django-PyCharm
  • 新闻稿的写作格式
  • 【国产FPGA】国产FPGA搭建图像处理平台
  • 【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块
  • RK3588平台开发系列讲解(NPU篇)RKNN SDK API流程
  • ChatGPT助力校招----面试问题分享(四)
  • Python Logging
  • Python爬虫——Python多线程爬虫详解
  • 血氧仪是如何得出血氧饱和度值的?
  • HTTPS协议,看这篇就够了
  • 二叉搜索树
  • 【canvas】简易小实例(钟表和画布)
  • 2023年全国最新道路运输从业人员精选真题及答案28
  • 【JavaEE】Thread 类及常用方法
  • 项目质量管理工作 不得不重视的4大关键点
  • web渗透之jwt 安全问题
  • 【Linux】Linux基本指令(下)
  • 让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析
  • web前端开发和后端开发哪个难度大?