【华为机试题解】奥特曼打怪兽

2023-11-06

大概题意

在一个N*N的正方形区域,每个小格可能有三种状态
值为0,正常可通过
值为1,奥特曼可通过,同时还可以消灭怪兽,消灭后值变为0,消灭怪兽数量+1
值为-1,有大石头,奥特曼无法通过

奥特曼需要先从上往下走,这个过程只能向下或者向右,到达右下角后,再从下往上走,这个过程只能向左或向上。需要找到奥特曼可以消灭怪兽的最大数量

输入:
第一行一个N,表示N的正方形区域的大小,N不超过50
第二行到N+1行,每一行N个数,表示正方形区域的情况

输出:
奥特曼可以消灭怪兽的最大数量

思路

1、和以前的动态规划很像,但是好像是不能用动态规划。(leetcode 741打脸了)
2、回溯,本题给C++的时间是2秒,一般都是1秒,说明可以走高复杂度策略

心情

考试的时候没写出来,考完后写出来了,就是这种心情

代码

#include <bits/stdc++.h>
using namespace std;
const int MAX = 60;

void walkup(int gird[MAX][MAX], int i, int j, int N, int tempAns, int& trueAns){
	if(i == 0 && j == 0){
		if(trueAns < tempAns){
			trueAns = tempAns;
		}
	}
	else if(i == 0){
		if(gird[i][j] == 0){
			walkup(gird, i, j-1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else if(j == 0){
		if(gird[i][j] == 0){
			walkup(gird, i-1, j, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else{
		if(gird[i][j] == 0){
			walkup(gird, i-1, j, N, tempAns, trueAns);
			walkup(gird, i, j-1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkup(gird, i-1, j, N, tempAns+1, trueAns);
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
}


void walkdown(int gird[MAX][MAX], int i, int j, int N, int tempAns, int& trueAns){
	if(i == N-1 && j == N-1){
		if(gird[i][j] == 0){
			walkup(gird, i-1, j, N, tempAns, trueAns);
			walkup(gird, i, j-1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			walkup(gird, i-1, j, N, tempAns+1, trueAns);
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
		}
	}
	else if(i == N-1){
		if(gird[i][j] == 0){
			walkdown(gird, i, j+1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkdown(gird, i, j+1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else if(j == N-1){
		if(gird[i][j] == 0){
			walkdown(gird, i+1, j, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkdown(gird, i+1, j, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else{
		if(gird[i][j] == 0){
			walkdown(gird, i+1, j, N, tempAns, trueAns);
			walkdown(gird, i, j+1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkdown(gird, i+1, j, N, tempAns+1, trueAns);
			walkdown(gird, i, j+1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
}

int main()
{
	int gird[MAX][MAX];
	int dp[MAX][MAX];
	for(int i = 0; i < MAX; i++){
		for(int j = 0; j < MAX; j++){
			gird[i][j] = 0;
			dp[i][j] = 0;
		}
	}
	int N;
	cin >> N;
	for(int i = 0; i < N; i++){
		for(int j = 0; j < N; j++){
			cin >> gird[i][j];
		}
	}
	
	// 从上往下走
//	for(int i = 0; i < N; i++){
//		for(int j = 0; j < N; j++){
//			if(gird[i][j] == 0){
//				dp[i][j] = dp[i][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
//			}
//			else if(gird[i][j] == 1){
//				dp[i][j] = dp[i][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
//				dp[i][j]++;
//			}
//			else{
//				dp[i][j] = -1;
//			}
//		}
//	}
	
	int tempAns = 0;
	int trueAns = 0;
	walkdown(gird, 0, 0, N, tempAns, trueAns);
	cout << trueAns << endl;
	
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【华为机试题解】奥特曼打怪兽 的相关文章

随机推荐

  • 中小银行文件共享需求场景下由GPFS迁移至华为企业级NAS存储实践分享

    导读 IBM GPFS是业界成熟的并行文件系统解决方案 在银行业被广泛应用于文件共享等集群场景 但其相对较高的部署和维护门槛 一定程度上不再能适应业务快速部署 灵活管理的需求 随着NAS产品近年来的长足发展 特别是以华为等主流存储厂商为代表
  • es6-模块化

    模块化 利用export导出和import导入实现模块化 一定程度上可以减少代码的冗余 创建一个js文件 内容如下 创建一个html文件 内容如下
  • WSA with Magisk Root安装配置教程(2023.5)

    前言 最近正式走上了安卓逆向的道路 刚开始尝试了各种模拟器 雷电 夜神 及其海外版 并且安装配置了多次magisk 倒不是说这些模拟器的体验有多差 主要还是不能与 Windows Hype V 共存导致无法使用 WSL 这点让我无法接受 s
  • C++中的指针与引用

    写在前面 指针和引用形式上很好区别 但是他们似乎有相同的功能 都能够直接引用对象 对其进行直接的操作 但是什么时候使用指针 什么时候使用引用呢 这两者很容易混淆 在此我详细介绍一下指针和引用 力争将最真实的一面展现给大家 如果我写得不够好
  • Python:Choosing Colormaps in Matplotlib

    Choosing Colormaps in Matplotlib Matplotlib has a number of built in colormaps accessible via matplotlib colormaps There
  • 学习:对抗神经网络 - 恶意软件

    https blog trendmicro com trendlabs security intelligence a machine learning model to detect malware variants 这个是一个博客中的信
  • [网络安全自学篇] 四十六.微软证书安全问题 (上)Windows验证机制及可执行文件签名问题

    在分享本篇文章之前 先简单聊聊我学习网络安全和系统安全的感受 半年来 作为网络安全的初学者 我写了近50篇安全的文章 从Web渗透到CTF 从二进制分析到恶意代码检测 从CVE漏洞还原到木马病毒及论文 但还是觉得自己非常菜 至今未进入安全圈
  • token做自动登录

    token 身份验证 token 前端自动登录 OpenSSL perl软件安装 https blog csdn net sunhuansheng article details 82218678 OpenSSl Perl这个软件安装无要求
  • vs2015安装_VS2015安装教程

    1 vs2015下载地址 https visualstudio microsoft com zh hans downloads 下载完后解压软件后以管理员身份运行右图的文件 2 开始安装后 会出现等待界面 可能需要几分钟 3 初始化安装程序
  • Python的学习笔记案例6--判断密码强度5.0

    本节课主要讲原来分散的方法封装成一个类 使之成为一个整体 方便调用 就是面向对象编程的思想 1 面向过程编程和面向对象编程的区别 面向过程 POP 以程序执行过程为设计流程的编程思想 面向对象 OOP 以事物为中心的编程思想 什么是对象 O
  • 服务器响应的jsp文件,JSP服务器响应

    JSP服务器响应 Response响应对象主要将JSP容器处理后的结果传回到客户端 可以通过response变量设置HTTP的状态和向客户端发送数据 如Cookie HTTP文件头信息等 一个典型的响应看起来就像下面这样 HTTP 1 1
  • OpenSceneGraph-OpenSceneGraph-3.6.5源码编译

    前言 准备 git 不是必须 使用git得到的源码是3 6 5版本的 CMake vs2019 VS017可以 我这里用的vs2019 osg主页 源码下载 Cmake编译源码 编译报错 CMake Warning dev at F Pro
  • SDWebImage 笔记

    SDWebImage托管在github上 https github com rs SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片 具有缓存管理 异步下载 同一个URL下载次数控制和优化等特征 使
  • A股上市有什么条件?A股上市条件有哪些?

    A股的上市条件有这几点 一 资格要求 1 发行人应当是依法设立且合法存续的股份有限公司 经国务院批准 有限责任公司在依法变更为股份有限公司时 可以采取募集设立方式公开发行股票 2 发行人自股份有限公司成立后 持续经营时间应当在3年以上 但经
  • 【Web架构】使用 JSON API 的好处

    在 API 工艺的世界里 没有比设计更受热议的领域了 从 REST gRPC 到 GraphQL 有许多方法可以设计和标准化 Web API 交互 今天 我们将注意力转向另一种方法 JSON API JSONAPI org 上详细介绍的用于
  • java字符数组初始化_Java 字符串(一)字符串初始化

    一 String类概述 1 概述 java lang String类代表字符串 Java程序中所有的字符串文字 例如 abc 都可以被看作是实现此类的实例 String 是引用数据类型 不是基本数据类型 类String 中包括用于检查各个字
  • CVE-2021-30116: Kaseya VSA 远程代码执行漏洞通告

    报告编号 B6 2021 070601 报告来源 360CERT 报告作者 360CERT 更新日期 2021 07 06 0x01 漏洞简述 2021年07月06日 360CERT监测发现Kaseya发布了VSA管理软件的风险通告 漏洞等
  • 春秋云镜靶场挑战——Tsclient

    目标IP 39 98 73 212 网络拓扑 入口机器 1 使用namp对目标IP进行扫描 发现目标开放了1433端口 MSSQL服务 3389端口 RDP服务 2 可以先爆破MSSQL服务 如下可以看出成爆破出密码 3 使用MDUT工具连
  • Leetcode168. Excel表列名称

    力扣 LeetCode 官网 全球极客挚爱的技术成长平台 题解 力扣 LeetCode 官网 全球极客挚爱的技术成长平台 代码如下 class Solution public String convertToTitle int column
  • 【华为机试题解】奥特曼打怪兽

    大概题意 在一个N N的正方形区域 每个小格可能有三种状态 值为0 正常可通过 值为1 奥特曼可通过 同时还可以消灭怪兽 消灭后值变为0 消灭怪兽数量 1 值为 1 有大石头 奥特曼无法通过 奥特曼需要先从上往下走 这个过程只能向下或者向右