[Algorithm][综合训练][四个选项][接雨水]详细讲解

2024-09-04 05:44

本文主要是介绍[Algorithm][综合训练][四个选项][接雨水]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.四个选项
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.接雨水
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.四个选项

1.题目链接

  • 四个选项

2.算法原理详解 && 代码实现

  • 解法:DFS(暴搜) + 剪枝 + Hash

    • 剪枝
      • 填某个数的时候,要看看还有没有剩余次数
      • 填某个数的时候,符不符合若干题的选项必须相同
        请添加图片描述
    #include <iostream>
    #include <vector>
    using namespace std;int m, x, y;
    int cnt[5];
    bool same[13][13]; // 存哪些答案是相同的int ret = 0;
    vector<int> path;// pos位置填入cur选项是否合法
    bool IsSame(int pos, int cur)
    {// 这里位置限制的比较妙for(int i = 1; i < pos; i++){if(same[pos][i] && path[i] != cur){return false;}}return true;
    }void DFS(int pos)
    {if(pos > 12){ret++;return;}for(int i = 1; i <= 4; i++) // 枚举四个选项{if(cnt[i] == 0) // 没有使用次数{continue;}if(!IsSame(pos, i)) // 相同的位置没有相同{continue;}cnt[i]--;path.push_back(i);DFS(pos + 1);cnt[i]++;path.pop_back();}
    }int main()
    {for(int i = 1; i <= 4; i++){cin >> cnt[i];}cin >> m;while(m--){cin >> x >> y;same[x][y] = same[y][x] = true;}path.push_back(0); // 占位DFS(1);cout << ret << endl;return 0;
    }
    

2.接雨水

1.题目链接

  • 接雨水

2.算法原理详解 && 代码实现

  • 解法

    • 思路解析

      • 求出每一根柱子上能接多少雨水,把所有柱子累加起来即可
      • 每根柱子上能接多少雨水,取决于两侧最高的柱子中较小的那个
        请添加图片描述
    • 动态规划 -> 预处理:前缀最大值 -> 要算上该位置本身去求前缀最大值
      请添加图片描述

    int trap(vector<int>& height) 
    {int n = height.size();vector<int> left(n, 0), right(n, 0);// 预处理left[0] = height[0];for(int i = 1; i < n; i++){left[i] = max(left[i - 1], height[i]);}right[n - 1] = height[n - 1];for(int i = n - 2; i >= 0; i--){right[i] = max(right[i + 1], height[i]);}// 求结果int ret = 0;for(int i = 1; i < n - 1; i++){ret += min(left[i], right[i]) - height[i];}return ret;
    }
    

这篇关于[Algorithm][综合训练][四个选项][接雨水]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135156

相关文章

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++