[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

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push