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

dfs深度搜索入门之滑雪

P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

本题我们主要使用了深度搜索和记忆化搜所。

首先我们可从任意一点开始滑行,这要求我们每一个点都进行一次深搜。但是如果每个点进行的话肯定会有许多个点重复被寻找最长滑雪长度,怎么办呢?这就轮到记忆化搜所了。我们每找到一个点就把这个点的最长化学长度保存起来。具体原理,我放在代码注释中。

public static int[][] aa;//每个点的高度
public static int bb;
public static int cc;
public static int[][] record;//记录任意一点得到最大化学长度
public static boolean[][] visited;//记录这一点有没有被探索过
public static int[] xx= {-1,1,0,0};///枚举位置
public static int[] yy= {0,0,-1,1};
public static int dfs(int a,int b) {if(visited[a][b]==true) {///如果一个点我们之前已经搜索过了直接返回这个点的最大滑雪长度return record[a][b];}int answer=0;record[a][b]=1;//若这个点没被探索过,我们先把其赋值为1因为任意一点滑雪长度至少是他自己就是1visited[a][b]=true;//接下来开始搜索这个点,先提前标记为·1int c;for(c=0;c<4;c++) {//往这个点的四个方位搜索int x=xx[c]+a;int y=yy[c]+b;if(x<0||x>=bb||y<0||y>=cc) {continue;}if(aa[a][b]>aa[x][y]) {//找到这四个方位最大长度answer=Math.max(answer, dfs(x, y));}}record[a][b]= record[a][b]+answer;加上去return record[a][b];
}}

完整代码:


import java.awt.FontFormatException;
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.net.DatagramPacket;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.plaf.ColorChooserUI;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
import javax.xml.crypto.dsig.spec.DigestMethodParameterSpec;
public class Main {public static void main(String[] args) throws IOException  {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
bb=Integer.parseInt(aStrings[0]);
cc=Integer.parseInt(aStrings[1]);
aa=new int[bb+1][cc+1];
record=new int[bb+1][cc+1];
visited=new boolean[bb+1][cc+1];
int a,b;
for(a=0;a<bb;a++) {String[] bStrings=br1.readLine().split(" ");for(b=0;b<cc;b++) {aa[a][b]=Integer.parseInt(bStrings[b]);}
}
int ans=0;for(a=0;a<bb;a++) {for(b=0;b<cc;b++) {ans=Math.max(ans, dfs(a, b));}
}
System.out.println(ans);
}
public static int[][] aa;
public static int bb;
public static int cc;
public static int[][] record;
public static boolean[][] visited;
public static int[] xx= {-1,1,0,0};
public static int[] yy= {0,0,-1,1};
public static int dfs(int a,int b) {if(visited[a][b]==true) {return record[a][b];}int answer=0;record[a][b]=1;visited[a][b]=true;int c;for(c=0;c<4;c++) {int x=xx[c]+a;int y=yy[c]+b;if(x<0||x>=bb||y<0||y>=cc) {continue;}if(aa[a][b]>aa[x][y]) {answer=Math.max(answer, dfs(x, y));}}record[a][b]= record[a][b]+answer;return record[a][b];
}}

相关文章:

dfs深度搜索入门之滑雪

P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题我们主要使用了深度搜索和记忆化搜所。 首先我们可从任意一点开始滑行&#xff0c;这要求我们每一个点都进行一次深搜。但是如果每个点进行的话肯定会有许多个点重复被寻找最长滑雪长度&#xff0c;…...

Python程序设计——元组、集合和字典

可以使用元组存储一个固定的元素列表&#xff0c;使用集合存储和快速访问不重复的元素、使用字典存储键值对并使用这些关键字来快速访问元素。 一、元组 元组跟列表类似&#xff0c;但是元组中的元素是固定的;也就是说&#xff0c;一旦一个元组被创建,就无法对元组中的元素进行…...

八股文之框架篇(Spring Boot、SSM)

文章目录 Spring中的单例bean是线程安全的吗什么是AOP&#xff0c;项目中有没有使用到AOPSpring中的事务是如何实现的Spring中事务失效的场景有哪些Bean的生命周期Spring中的循环依赖&#xff08;循环引用&#xff09;SpringMVC的执行流程SpringBoot自动配置原理Spring、Spring…...

[PaddlePaddle] [学习笔记] [上] 计算机视觉(卷积、卷积核、卷积计算、padding计算、BN、缩放、平移、Dropout)

1. 计算机视觉的发展历程 计算机视觉作为一门让机器学会如何去“看”的学科&#xff0c;具体的说&#xff0c;就是让机器去识别摄像机拍摄的图片或视频中的物体&#xff0c;检测出物体所在的位置&#xff0c;并对目标物体进行跟踪&#xff0c;从而理解并描述出图片或视频里的场…...

【JS 贪心算法常见步骤】

贪心算法是一种解决优化问题的算法&#xff0c;其思想是在每一步选择中选择当前状态下最优解&#xff0c;从而达到全局最优解的目的。 以下是贪心算法的一些常见步骤&#xff1a; 将问题模型化为一个包含若干子问题的问题集合&#xff0c;每个子问题都有一个最优解。 对于每个…...

应用案例|基于三维机器视觉的机器人纸箱拆码垛应用解决方案

Part.1 项目背景 在现代物流和制造行业中&#xff0c;纸箱的拆码垛操作是一项重要且频繁的任务。传统的纸箱拆码垛工作通常由人工完成&#xff0c;这种方式存在劳动强度大、生产效率低以及人为操作容易导致错误等问题&#xff0c;严重影响物料的安全运输和质量。为了满足物流行…...

【ARM 嵌入式 编译 Makefile 系列 10 - Makefile sort 函数详细介绍】

文章目录 Makefile 函数 sort 学习Makefile 函数 sort 学习 sort 是Makefile的一个内建函数,它用于将列表中的词进行排序,并删除重复的词。sort函数的语法如下: $(sort list)list是你想要排序的单词列表。 下面是一个使用sort函数的简单示例: FOO = c b a c b a BAR =…...

Flask下载文件报错304 NOT MODIFIED

文章目录 问题描述解决方案参考文献 问题描述 前端 Vue 下下来的文件无法正常打开&#xff0c;大小比正常的略大一点&#xff0c;通过 Postman 直接调用是正常的 解决方案 由前端解决 如果响应大小比文件略大一点&#xff0c;从 responses 中取出关键数据再组成文件如果响应…...

AI Chat 设计模式:15. 桥接模式

本文是该系列的第十五篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 如果你是第一次接触桥接模式&#xff0c;那么你会有哪些疑问呢&#xff1f;A.1Q.2 什…...

Python批量替换Excel和Word中的关键字

一、问题的提出 有时&#xff0c;我们手头上有多个Excel或者Word文件&#xff0c;但是领导突然要求对某几个术语进行批量的修改&#xff0c;你是不是有要崩溃的感觉。因为这么多文件&#xff0c;要一个一个地打开文件&#xff0c;再进行批量替换修改&#xff0c;几个文件还好&…...

Codeforces算法心得——A. Array Coloring

大家好&#xff0c;我是晴天学长&#xff0c;确实全世界最大的算法竞赛平台有很多独特且创新的地方&#xff0c;后面我会持续的更新的&#xff01;加油&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa; 1 &#xff09;A. Array Coloring 2) .算法思路 数组中的奇数个数一…...

论文阅读:《Waymo Public Road Safety Performance Data》

文章目录 1 背景2 方法2.1 数据来源2.2 碰撞数据 3 碰撞事件分析4 讨论 1 背景 这篇文章是讲waymo道路安全性能数据分析的&#xff0c;主要想表达的是waymo自动驾驶系统在安全上面的出色表现&#xff0c;以向政府、大众提高自己产品的公信力。 这篇文章分析的数据是自从2019年到…...

url中的特殊符号及特殊字符编码对照表

有些符号在URL中是不能直接传递的&#xff0c;如果要在URL中传递这些特殊符号&#xff0c;那么就要使用他们的编码了。 编码的格式为&#xff1a;%加字符的ASCII码&#xff0c;即一个百分号%&#xff0c;后面跟对应字符的ASCII&#xff08;16进制&#xff09;码值。例如 空格的…...

【C++】详解用标准库的std::mt19937生成随机数

2023年8月16日&#xff0c;周三晚上 写了1个半小时 目录 概述英文文档什么是mt19937什么是状态大小头文件std::mt19937的常用成员函数1. 构造函数&#xff1a;2. 种子操作函数&#xff1a;3. 随机数生成函数&#xff1a;4. 辅助函数&#xff1a;生成种子值方法1&#xff1a;使…...

科大讯飞发布星火认知大模型2.0版——体验实测

8月15日&#xff0c;科大讯飞举行讯飞星火认知大模型V2.0升级发布会&#xff0c;对外展示其升级后的大模型代码能力和多模态能力&#xff0c;同时发布并升级搭载讯飞星火认知大模型V2.0能力的多项应用和产品。自5月6日首发以来&#xff0c;星火认知大模型经历V1.5版本的迭代&am…...

部署mysql到win10电脑上

中间出现了很多问题&#xff0c; 记录一下 我这边是去官网下载的 &#xff0c;链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 我这边选了不是最新版本的MySQL&#xff0c;因为第一次安装8.1.0版本的&#xff0c;死活运行不起来&#xff0c;直接卸载安重装了&#x…...

nginx+php 出现502 bad gateway

nginxphp 出现502 bad gateway&#xff0c;一般这都不是nginx的问题&#xff0c;而是由于 fastcgi或者php的问题导致的&#xff0c;常见的有以下几种。 1. php.ini 的memory_limit 过小&#xff08;如果有个别php程序进程需要占用极大内存时这个必须注意&#xff09; 2. ph…...

基于LVQ神经网络的人脸朝向识别

1案例背景 1.1人脸识别概述 人脸识别作为一个复杂的模式识别问题,近年来受到了广泛的关注,识别领域的各种方法在这个问题上各显所长,而且发展出了许多新方法,大大丰富和拓宽了模式识别的方向。人脸识别、检测,跟踪、特征定位等技术近年来一直是研究的热点。人脸识别是人脸应用…...

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意&#xff1a;一个数组&#xff0c;找到和最大的子串 我的思路 我记得好像On的动态规划来做的&#xff1f;但是想不起来了&#xff0c;先死做&#xff0c;用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…...

Rabbitmq消息不丢失

目录 一、消息不丢失1.消息确认2.消息确认业务封装2.1 发送确认消息测试2.2 消息发送失败&#xff0c;设置重发机制 一、消息不丢失 消息的不丢失&#xff0c;在MQ角度考虑&#xff0c;一般有三种途径&#xff1a; 1&#xff0c;生产者不丢数据 2&#xff0c;MQ服务器不丢数据…...

Kotlin runBlocking launch多个协程读写mutableListOf时序

Kotlin runBlocking launch多个协程读写mutableListOf时序 import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main(args: Array<String>) {var lists mutableListOf<String>()runBlocking {launch {r…...

Spring Cloud微服务治理框架深度解析

在学习一个技术之前&#xff0c;首先我们要了解它是做什么的&#xff0c;我们为什么要用它。不然看再多资料都理解不了&#xff0c;因此我们先来讲解下Spring Cloud Spring Cloud是一套微服务治理框架&#xff0c;几乎考虑到了微服务治理的方方面面。那么接下来具体说下 Spring…...

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff0c;且创建的对象想拥有其他对象在某一刻的状态&#xff0c;则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象&#xff0c;并且该对象拥有其他对象在某一刻的状态。…...

Java 中操作 Redis

文章目录 一、Redis 常用数据类型二、Redis 常用操作命令1. 字符串命令2. 哈希命令3. 列表命令4. 集合命令5. 有序集合命令6. 通用命令 三、在 Java 中操作 Redis1. 导入 maven 坐标2. 配置 Redis 数据源3. 编写配置类 四、在代码中的具体使用 一、Redis 常用数据类型 Redis 存…...

数据结构--最短路径 Dijkstra算法

数据结构–最短路径 Dijkstra算法 Dijkstra算法 计算 b e g i n 点到各个点的最短路 \color{red}计算\ begin\ 点到各个点的最短路 计算 begin 点到各个点的最短路 如果是无向图&#xff0c;可以先把无向图转化成有向图 我们需要2个数组 final[] &#xff08;标记各顶点是否已…...

在 Linux 虚拟机上使用 Azure 自定义脚本扩展版本

参考 azure创建虚拟机,创建虚拟机注意入站端口规则开放80端口、 2.转到资源&#xff0c;点击扩展应用程序&#xff0c;创建存储账户&#xff0c;创建容器&#xff0c;上传文件&#xff0c;选择文件&#xff0c;会自动执行部署。 apt-get update -y && apt-get insta…...

W5500-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5500-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram P…...

ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(四)_flame.liu的博…...

android内存分析工具记录,请利用好最后2个神器

相机见证了java内存暴增和native持续增长的问题&#xff0c;因此这里记录一下使用的工具情况&#xff0c;方便后续继续使用 一、java 内存 如果是java层的内存可以直接借助leakCanary工具&#xff0c;配置也很简单&#xff0c;直接在build.gradle中添加依赖即可&#xff1a; …...

安科瑞变电所运维平台在电力系统中应用分析

摘要&#xff1a;现代居民生活、工作对电力资源的需求量相对较多&#xff0c;给我国的电力产业带来了良好的发展机遇与挑战。探索电力系统基本构成&#xff0c; 将变电运维安全管理以及相应的设备维护工作系统性开展&#xff0c;能够根据项目实践工作要求&#xff0c;将满足要求…...