Atcode搜索

news2024/11/17 12:35:17

D - Medicines on Grid (atcoder.jp)

这是一道搜索题目,我们使用bfs来做,因为本题目没让你求最小路径,使用dfs也可以,这里使用bfs。

本题目核心思想如下:

小高要从起点到终点,要求其在能量大于等于0时到达终点,初始能量为0.

由于每走一个格子都需要一点能量,小高要到达终点势必需要去嗑药,那就涉及两个问题该如何去选择获取哪个药物,以及选择完药物后该如何行走的问题。在这里牵扯到一个格子可能由于去取得药物要走两次,所以单纯的bfs已经不合适,那我们考虑什么情况下一个格子要走两次?答案很显然,第二次经过这个格子时小高的能量比第一次高,只有如此才会使得走两次有意义。也只有这样才能保证最终的小高到达终点时的能量会尽可能的高也就保证小高尽可能的到达终点。在这里我们把visited数组改变他的含义,设置为小高在这一点的能量,只有比原先的高,才有可以走(visited详细说明:我们可以引入一点贪心的思想。我们可以将visit数组从bool型转为int型,存储目前到达它的路径中,到达它时血量最多的一次的血量。因为是bfs,所以简单的证明可以知道,如果一条路径到达一个已经到达过的点,且血量还小于等于visit时,那么即使完成了任务,其步数也不会时最优的。反之,如果到达一个点,其血量值可以更大,那么这就一种可能的路径,并不是重复到达。这样,就可以既保证了答案得正确性,又保证了不会TLE),这下我们的第二个问题路线结束了。第一个问题就交由bfs来解决。

接下来的是细节问题:

1:visited数组存储小高到达这一点时的能量,我们初始设置为-1。因为之后我们要使得到达这个点的能量最大才可以走这个点,如果设置为0,假如到达终点的时候能量恰好为0,那么我们在终点的上一个点能量为1,就无法向终点走了,因为终点的0并不大于visted数组,所以visited设置为-1.

2:第一次使用药物后,一定把药物设置为0,确保到达每一个格子的能量都大于等于0.

贴上代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
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.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.math.MathContext;
import java.security.PublicKey;
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.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
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(" ");
    aa=Integer.parseInt(aStrings[0]);
    bb=Integer.parseInt(aStrings[1]);
    int a,b;
    cc=new char[aa+1][bb+1];
    yaowu=new int[aa+1][bb+1];
    visited=new int[aa+1][bb+1];
    int f;
    for(a=1;a<=aa;a++) {	
    	String aString=br1.readLine();
    	for(f=1;f<=bb;f++) {
    		cc[a][f]=aString.charAt(f-1);
    	}
    }
    String[] bStrings=br1.readLine().split(" ");
    b=Integer.parseInt(bStrings[0]);
    for(a=0;a<b;a++) {
    	String[] cStrings=br1.readLine().split(" ");
    	int c=Integer.parseInt(cStrings[0]);
    	int d=Integer.parseInt(cStrings[1]);
    	int e=Integer.parseInt(cStrings[2]);
    	yaowu[c][d]=e;
    }
    for(a=1;a<=aa;a++) {
    	for(b=1;b<=bb;b++) {
    		visited[a][b]=-1;
    		if(cc[a][b]=='S') {
    			cc[a][b]='.';
    			startx=a;
    			starty=b;
    		}
    		if(cc[a][b]=='T') {
    			cc[a][b]='.';
    			endx=a;
    			endy=b;
    		}
    	}
    }
    //System.out.println(startx+" "+starty+" "+endx+" "+endy);
dian d1=new dian(startx, starty, yaowu[startx][starty]);
visited[startx][starty]=yaowu[startx][starty];
ll1.add(d1);
while(ll1.size()!=0) {
	dian d2=ll1.remove();
	int x=d2.x;
	int y=d2.y;
	int blood=d2.blood;
	//System.out.println(x+" "+y+" "+blood);
	if(x==endx&&y==endy) {
		System.out.println("Yes");
		return;
	}
	for(int a1=0;a1<4;a1++) {
		int x1=x+xx[a1];
		int y1=y+yy[a1];
		int blood1=blood-1;
		if(x1>=1&&x1<=aa&&y1>=1&&y1<=bb&&cc[x1][y1]!='#'&&blood1>=0) {
		
			if(blood1<yaowu[x1][y1]&&yaowu[x1][y1]!=0) {
				blood1=yaowu[x1][y1];
				yaowu[x1][y1]=0;
			}
			if(blood1>visited[x1][y1]) {
				visited[x1][y1]=blood1;
				ll1.add(new dian(x1, y1, blood1));
			}
		}
	}
}
System.out.println("No");
}
public static int aa;
public static int bb;
public static char[][] cc;
public static int[][] yaowu;
public static int[][] visited;
public static int[] xx= {-1,1,0,0};
public static int[] yy= {0,0,-1,1};
public static LinkedList<dian> ll1=new LinkedList<>();
public static int startx,starty;
public static int endx,endy;
}
class dian{
	int x;
	int y;
	int blood;
	public dian(int x, int y, int blood) {
		super();
		this.x = x;
		this.y = y;
		this.blood = blood;
	}
	
}

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

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

相关文章

搜索与图论——拓扑排序

有向图的拓扑排序就是图的宽度优先遍历的一个应用 有向无环图一定存在拓扑序列&#xff08;有向无环图又被称为拓扑图&#xff09;&#xff0c;有向有环图一定不存在拓扑序列。无向图没有拓扑序列。 拓扑序列&#xff1a;将一个图排成拓扑序后&#xff0c;所有的边都是从前指…

k8s1.28-helm安装kafka-Raft集群

参考文档 [Raft Kafka on k8s 部署实战操作 - 掘金 (juejin.cn)](https://juejin.cn/post/7349437605857411083?fromsearch-suggest)部署 Raft Kafka&#xff08;Kafka 3.3.1 及以上版本引入的 KRaft 模式&#xff09;在 Kubernetes (k8s) 上&#xff0c;可以简化 Kafka 集群…

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据…

一文彻底搞懂JAVA 异常分类及处理

文章目录 1. 概念2. 异常分类3. 异常的处理方式4. throw 和 throws 的区别 1. 概念 如果某个方法不能按照正常的途径完成任务&#xff0c;就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时&#xff0c;这个方法会立刻退出同时不返回任何值。另…

蓝桥杯第十四届C++C组

三国游戏 题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y, Z 增加Ai , Bi ,Ci …

【1】初识 Python

【1】初识 Python 1、编程语言(1) 语言(2) 编程语言(3) 如何利用编程语言与计算机交流(4) 常见的编程语言(5) 语法 2、Python 简介(1) 什么是 Python(2) Python 能做什么(3) Python 的由来(4) Python的特点① 语法精简② 生态好&#xff0c;开发效率高③ Python开发初体验&…

全国计算机等级考试三级Linux应用与开发技术考试-习题汇总

https://blog.csdn.net/qq_42025798/article/details/119155696 3.第1章-计算机体系结构与操作系统-练习题-简答题 https://blog.csdn.net/qq_42025798/article/details/119186151 4.第1章-计算机体系结构与操作系统-练习题-填空题 https://blog.csdn.net/qq_42025798/article/…

风险模型总结

系统性风险 系统性风险&#xff08;Systematic Risk&#xff09;微观层面的定义由夏普&#xff08;William Sharpe&#xff09;在资本资产定价模型&#xff08;CAPM&#xff09;中首次提出&#xff0c;即资本市场中存在的不能通过分散投资予以消除的风险 模型也会带来风险 详…

xhadmin多应用Saas框架和FastAdmin有什么区别?

xhadmin是什么&#xff1f; xhadmin 是一套基于最新技术的研发的多应用 Saas 框架&#xff0c;支持在线升级和安装模块及模板&#xff0c;拥有良好的开发框架、成熟稳定的技术解决方案、提供丰富的扩展功能。为开发者赋能&#xff0c;助力企业发展、国家富强&#xff0c;致力于…

mac老版本如何升级到最新版本

mac老版本如何升级到最新版本 老macbook升级新版本&#xff08;Big sur、Monterey&#xff09; 首先介绍我的电脑的机型及情况&#xff1a; 2015年初的MacBook Air 处理器是1.6Hz 双核Interl Core i5 内存4G 老版本只能升到10.13 想要升到最高版本的原因&#xff1a;想要注册…

# Set rootfs type, including ext2 ext4 squashfs export RK_ROOTFS_TYPE=ext4

ext2、ext4和squashfs是Linux系统中常见的几种文件系统类型&#xff0c;每种文件系统都有其特点和用途&#xff1a; ext2 (Second Extended Filesystem) 是Linux中较早使用的文件系统。它不支持日志功能&#xff0c;因此在系统意外崩溃或断电后的恢复时间可能会比较长&#xff…

SVPWM原理

SVPWM原理 前言 SVPWM的基本介绍 SVPWM:着眼于使形成的磁链轨迹跟踪由理想三相平衡正弦波电压源供电时所形成的基准磁链圆优点主要有: (1) SVPWM优化谐波程度比较高,消除谐波效果要比SPWM好,实现容易,并且可以提高电压利用率。 (2) SVPWM比较适合于数字化控制系统。

Tesseract 安装与配置及验证码识别

Tesseract 安装与配置 Tesseract 的使用&#xff0c;需要环境的支持&#xff0c;以实现简单的转换和训练。 1.环境 python版本&#xff1a;3.8.3 &#xff08;python2.7或3以上&#xff09; 操作系统&#xff1a;windows系统 2.Python安装 详见&#xff1a;Miniconda的…

青蛙跳杯子【蓝桥杯】/bfs

青蛙跳杯子 bfs 思路&#xff1a;刚开始用的是dfs&#xff0c;但是不太行&#xff0c;DFS 可能会导致搜索深度过深&#xff0c;增加了时间复杂度&#xff0c;BFS 适合求解最短路径问题&#xff0c;BFS 在搜索过程中&#xff0c;首先访问距离初始节点最近的节点&#xff0c;因此…

基于VUE的电影交流平台的设计与实现

摘 要 伴随着信息科技和互联网科技的迅猛发展&#xff0c;人们的消费重心随着生活水平的提高逐渐地转移到了精神层次&#xff0c;而电影则是其中之一。以前电影交流采用面对面交流的方法&#xff0c;局限了电影讨论交流的范围和方式。本系统是一个基于VUE框架&#xff0c;使用…

Peter算法小课堂—线性dp

今天&#xff0c;你读完这篇文章&#xff0c;普及组的动态规划已经可以秒了。 最长公共子序列 求两个数列的最长公共子序列&#xff08;Longest Common Subsequence&#xff0c;LCS&#xff09;的长度。 数列 X 和 Y 的最长公共子序列 Z&#xff0c;是指 Z 既是 X 的子序列&…

在实体类中使用JSONObject对象

有时候我们的业务需求可能字段是json格式&#xff0c;这个时候我们的实体类就对应的也应该是json格式&#xff0c;需要使用到JSONObject这个对象&#xff0c;但是可能会使用不了这个对象&#xff0c;那接下来我将简单介绍如何使用这个对象。 以下为我的实体类中的某个字段&…

leetcode.707. 设计链表

题目 题意&#xff1a; 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。 addAtHead(val)&#xff1a;在链表的第一个元素之前添加一个值为 val 的节点。插入后&#xff0c;新节点将成为链表的…

乐健体育刷分----AI运动的站姿风车

一.前情提要 1.本文仅作学习参考不得用于其他不当途径&#xff0c;若有问题后果自负 二.操作 1.打开乐健体育 2.点击AI运动&#xff0c;找到站姿风车 3.摄像头对准以下图片&#xff0c;拖动图片或保持不动均可 &#xff08;站姿风车2组及以上效果更佳&#xff09;

unity学习(82)——profiler 限制帧率

实际测试发现当玩家个数增加时&#xff0c;客户端明显变的很卡&#xff0c;想知道为什么变卡了&#xff01; 1.只有玩家自己的时候 2.两个时候感觉脚本的工作量增大了 拖了一会直接炸了&#xff01;&#xff08;数据包积压把内存搞炸&#xff0c;我第一次见&#xff09; 3.我觉…