[Algorithm][综合训练][打怪][判断是不是平衡二叉树][最大子矩阵]详细讲解

news2024/9/26 3:23:08

目录

  • 1.打怪
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.判断是不是平衡二叉树
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.最大子矩阵
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.打怪

1.题目链接

  • 打怪

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

  • 自己的版本:暴力模拟
    #include <iostream>
    using namespace std;
    
    int main()
    {
        int t = 0;
        cin >> t;
    
        int h, a, H, A;
        while(t--)
        {
            cin >> h >> a >> H >> A;
            if(a >= H)
            {
                cout << -1 << endl;
                continue;
            }
    
            int cnt = 0, tmpH = H;
            while(h > 0)
            {
                if((tmpH -= a) <= 0)
                {
                    cnt++;
                tmpH = H;
                    continue;
                }
    
                h -= A;
            }
    
            cout << cnt << endl;
        }
    
        return 0;
    }
    
  • 优化版本:数学
    • 遇到一只怪物,怪物能抗几次?
      • m = H / a + (H % a != 0 ? 1 : 0)
    • 杀死一只怪物的时候,玩家被攻击几次
      • n = m - 1
    • 杀死一只怪物的时候,玩家掉几点血
      • x = n * A
    • 玩家一共能杀死多少怪物
      • ret = h / x - (h % x == 0 ? 1 : 0)
    #include <iostream>
    using namespace std;
    
    int h, a, H, A;
    
    int Check()
    {
    	if(a >= H)
    	{
    		return -1;
    	}
    
    	int m = (H / a) + (H % a != 0 ? 1 : 0); // 怪物能抗⼏次
    	int n = m - 1; // 玩家被攻击⼏次
    	int x = n * A; // 杀死⼀只怪物的时候,玩家会掉多少⾎
    	int ret = h / x - (h % x == 0 ? 1 : 0);
    
    	return ret;
    }
    
    int main()
    {
    	int t = 0;
    	cin >> t;
    	
    	while(t--)
    	{
    		cin >> h >> a >> H >> A;
    		cout << Check() << endl;
    	}
    	
    	return 0;
    }
    

2.判断是不是平衡二叉树

1.题目链接

  • 判断是不是平衡二叉树

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

  • 优化版本
    class Solution 
    {
    public:
        bool IsBalanced_Solution(TreeNode* pRoot) 
        {
            return DFS(pRoot) != -1;
        }
    
        // 返回值不是-1的话,其余的返回值表示的是树高
        int DFS(TreeNode* root)
        {
            if(root == nullptr)
            {
                return 0;
            }
    
            int left = DFS(root->left);
            if(left == -1)
            {
                return -1; // 剪枝
            }
    
            int right = DFS(root->right);
            if(right == -1)
            {
                return -1;
            }
    
            return abs(left - right) <= 1 ? max(left, right) + 1 : -1;
        }
    };
    

3.最大子矩阵

1.题目链接

  • 最大子矩阵

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

  • 解法:二维前缀和

    • 初始化⼆维前缀和矩阵
    • 枚举所有的⼦矩阵,求出最⼤⼦矩阵
  • 如何枚举所有的子矩阵?

    for(0 ~ n - 1) -> x1
    	for(0 ~ m - 1) -> y1
    		for(x1 ~ mn - 1) -> x2
    			for(y1 ~ m - 1) -> y2
    
  • 如何计算矩阵中所有元素的和? --> 二位前缀和 --> 动态规划

    • 初始化二维dp表
      请添加图片描述

    • 使用二维dp表
      请添加图片描述

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
    	int n = 0, x = 0;
    	cin >> n;
    
    	// 动态规划 --> 求二维前缀和数组
    	vector<vector<int>> dp(n + 1, vector<int>(n + 1, 0));
    	for(int i = 1; i <= n; i++)
    	{
    		for(int j = 1; j <= n; j++)
    		{
    			cin >> x;
    			dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + x;
    		}
    	}
    
    	int ret = -0x3f3f3f3f;
    	for(int x1 = 1; x1 <= n; x1++)
    	{
    		for(int y1 = 1; y1 <= n; y1++)
    		{
    			for(int x2 = x1; x2 <= n; x2++)
    			{
    				 for(int y2 = y1; y2 <= n; y2++)
    				 {
    					  ret = max(ret, dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1]);
    				 }
    			}
    		}
    	}
    
    	cout << ret << endl;
    
    	return 0;
    }
    

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

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

相关文章

C++ 设计模式——代理模式

C 设计模式——代理模式 C 设计模式——代理模式1. 主要组成成分2. 逐步构建代理模式2.1 抽象主题类定义2.2 真实主题类实现2.3 代理类实现2.4 主函数 3. 代理模式 UML 图代理模式 UML 图解析 4. 代理模式的优点5. 代理模式的缺点6. 代理模式的分类7. 代理模式和装饰者模式比较…

MybatisPlus:实现分页效果并解决错误:cant found IPage for args

我们在做开发使用mybatisplus 做分页查询的时候遇到了个问题&#xff1a; 继承 IPage拦截没有作用会默认分页&#xff0c;这个时候报了cant found IPage for args 错误~~~ 我们分析了下&#xff0c;其实这个问题很简单&#xff0c;是因为没有给默认值赋值&#xff0c;因为查询…

日撸Java三百行(day35:图的m着色问题)

目录 一、问题描述 二、思路分析 三、代码实现 总结 一、问题描述 在高中学习排列组合的时候&#xff0c;有一个非常经典的问题&#xff0c;就是涂色问题&#xff0c;即用m种颜色给n块区域涂色&#xff0c;要求每块区域只能涂同一种颜色且相邻区域的颜色不能相同&#xff…

pyinstaller将python程序打包成exe文件

将python代码打包成exe文件可以在不安装python环境的情况下直接运行python代码&#xff0c;譬如自己在自己的电脑上写好了代码&#xff0c;想发给其他人使用&#xff0c;可以用下述方法将python程序打包成exe文件&#xff0c;其他人直接执行exe文件即可使用该程序。 1.安装pyi…

二叉搜索树:数据结构之美

目录 引言基础知识 定义性质操作详解 插入节点删除节点查找节点遍历 前序遍历中序遍历后序遍历高级主题 平衡问题AVL树简介应用案例总结 引言 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树&#xff0c;它的每个节点具有以下性质&#xff1a;左子树上的所有节点的键…

Python数据采集与网络爬虫技术实训室解决方案

在大数据与人工智能时代&#xff0c;数据采集与分析已成为企业决策、市场洞察、产品创新等领域不可或缺的一环。而Python&#xff0c;作为一门高效、易学的编程语言&#xff0c;凭借其强大的库支持和广泛的应用场景&#xff0c;在数据采集与网络爬虫领域展现出了非凡的潜力。唯…

Mysql重要参数

1、是否开启慢SQL日志 show VARIABLES like slow_query_log%; 2、慢SQL日志保存位置 show VARIABLES like slow_query_log_file%; 3、慢SQL的阈值&#xff0c;超过则是慢SQL&#xff0c;单位秒&#xff0c;默认10s show VARIABLES like long_query_time%;

小阿轩yx-Kubernetes存储入门

小阿轩yx-Kubernetes存储入门 前言 数据是一个企业的发展核心&#xff0c;它涉及到数据存储和数据交换的内容。在生产环境中尤为重要的一部分在 Kubernetes 中另一个重要的概念就是数据持久化 Volume。 Volume 的概念 对多数项目而言 数据文件的存储是非常常见的 在 Kube…

计算机的错误计算(七十四 )

摘要 回复网友的疑问&#xff1a;用错数解释计算机的错误计算&#xff08;六十四&#xff09;中的错误计算原因。 计算机的错误计算&#xff08;六十四&#xff09;到&#xff08;六十九&#xff09;&#xff0c;以及&#xff08;七十一&#xff09;与&#xff08;七十三&…

攻防世界 1000次点击

做题笔记。 下载解压 查壳。 32位ida打开。 查找字符串。 winmain函数写的&#xff0c;程序运行如下&#xff1a; 一开始思路是想着分析找到关键代码然后去od进行调试。 后来&#xff0c;额&#xff0c;不想看代码了。吐了。 尝试去字符串搜索flag样式&#xff0c;确实一发现…

高效恢复,无忧存储:2024年数据恢复工具大搜罗

不知道你是否了解过电子存储设备&#xff0c;我们的设备往往都存储在一个小小的芯片里&#xff0c;它为我们提供了数据携带的便捷性&#xff0c;当然也为我们带来了数据意外丢失的风险。为了我们的数据安全&#xff0c;我们来探讨一下有什么数据恢复工具能为我们的资料保驾护航…

Ruo-Yi 前后端分离如何不使用注解@DataSource的方式而是使用Mybatis插件技术实现多数据源的切换【可以根据配置文件进行开启/关闭】

Ruo-Yi 前后端分离如何不使用注解DataSource的方式而是使用Mybatis插件技术实现多数据源的切换【可以根据配置文件进行开启/关闭】 1、首先 配置文件&#xff1a; # 数据源配置 spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.c…

ZooKeeper--基于Kubernetes部署ZooKeeper

ZooKeeper 服务 服务类型: 无头服务&#xff08;clusterIP: None&#xff09;&#xff0c;这是 StatefulSet&#xff08;有状态集&#xff09;必需的配置。 端口: 2181 (客户端): 用于客户端连接。 2888 (跟随者): 用于 ZooKeeper 服务器之间的连接。 3888 (领导者): 用于领导者…

邮政快递批量查询解决方案:提升业务运营效率

邮政快递批量查询&#xff1a;固乔快递查询助手的高效体验 在电商行业日益繁荣的今天&#xff0c;快递物流成为了连接商家与消费者的关键纽带。而对于需要处理大量订单的电商企业或个人而言&#xff0c;如何高效、准确地查询和跟踪快递物流信息显得尤为重要。幸运的是&#xf…

linux 云主机下载压缩包安装配置 maven 实录(华为云 EulerOS)

本想通过 yum install maven 直接安装的, 方便省事, 但报错说没找到, 于是只能手动安装了, 把整个过程记录了一下, 包括下载, 解压, 配置及验证的全过程, 并对用到的命令及参数作了详细说明, 需要的同学可以参考. maven 官网找到下载链接 首先要去到 maven 的官网, https://m…

OpenCV+Python自动填涂机读卡

接上一篇OpenCVPython识别机读卡-CSDN博客&#xff0c;既然可以识别机读卡填涂答案了&#xff0c;将标准答案绘制到机读卡上也就简单了。 工作原理 1.答题区域为整张图片最大轮廓&#xff0c;先找出答题区域。 2.答题区域分为6行&#xff0c;每行4组&#xff0c;第6行只有1组…

【Java设计模式】抽象文档模式:以灵活性简化数据处理

文章目录 抽象文档设计模式的意图抽象文档模式的详细解释及实际示例Java中抽象文档模式的编程示例抽象文档模式类图Java中何时使用抽象文档模式抽象文档模式的优点和权衡源码下载参考和致谢 抽象文档设计模式的意图 Java中的抽象文档设计模式是一种关键的结构设计模式&#xf…

【mysql集群之组复制】

目录 一、 mysql高可用之组复制 (MGR)组复制单主和多主模式实现mysql的组复制 二、 mysql-router&#xff08;mysql路由&#xff09;实现负载均衡 一、 mysql高可用之组复制 (MGR) MySQL Group Replication(简称 MGR )是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高…

OpenHarmony南向开发:SmartPerf-Device使用说明

简介 SmartPerf 端是一款基于 OpenHarmony 系统开发的性能功耗测试工具&#xff0c;操作简单易用&#xff0c;可提供包括性能、功耗的关键 KPI 指标&#xff0c;给出具体指标的测试值&#xff0c;包括采集设备的 FPS、CPU、GPU、Ftrace 等指标数据&#xff1b; 目前 SmartPer…

uniapp之app版本更新,整体更新和热更新

目录 需求&#xff1a; 版本更新有两种更新模式&#xff1a; 实现&#xff1a; 前提&#xff1a; 热更新&#xff1a; 打包wgt包&#xff1a;菜单->发行->原生App-制作移动App资源升级包 代码逻辑: 整体更新&#xff1a; 实际项目开发&#xff1a; 需求&#xf…