P2802 回家

2024-03-31 17:20
文章标签 回家 p2802

本文主要是介绍P2802 回家,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P2802 回家 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

虽然是普及-难度的题,但是感觉细节有很多。

细节:

  • bfs第一次到 ( i , j ) (i, j) (i,j),但是距离不一定是最小的

  • 鼠标是一次性物品

  • 血量到达 ( x x , y y ) (xx, yy) (xx,yy)为0时是不能走的

找最优距离不能贪心的认为

// cnt - nhp > vis[xx][yy],其中vis表示到该点最小距离,
// 但是有可能cnt - nhp经过一个回路后对于[xx, yy]距离是相同的
// 因此不是最优的
if(nhp <= 0 || cnt - nhp > vis[xx][yy]) continue; // 再走不是较优的 或者 血量不够

这样会有一个过不去

在这里插入图片描述

样例如下:

in:
7 6
2 0 0 0 0 0 
1 0 0 0 0 0 
1 1 4 0 0 0 
1 0 0 0 0 0 
1 1 1 1 1 3
4 0 1 0 4 0 
0 0 4 0 0 0out:
15

但是如果用 i n in in数组表示该点最大的血量,让到该点血量跟 i n in in进行比较是最优的。

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = 12;
const int INF = 0x3f3f3f3f;
int ph[N][N];
int vis[N][N], in[N][N];
void init() {for(int i = 0; i < N; ++i) {for(int j = 0; j < N; ++j) vis[i][j] = INF;}
}
int fx[] = {0, 0, 1, -1};
int fy[] = {1, -1, 0, 0};
struct no {int x, y, d, hp;
};
int main()
{init();int n,m; cin>>n>>m;queue<no> q;for(int i = 0; i < n; ++i) {for(int j = 0; j < m; ++j) {cin>>ph[i][j];if(ph[i][j] == 2) q.push({i, j ,0, 6}), vis[i][j] = 0;}}while(q.size()) {auto tmp = q.front(); q.pop();for(int i = 0; i < 4; ++i) {int xx = tmp.x + fx[i], yy = tmp.y + fy[i], cnt = tmp.d + 1, nhp = tmp.hp - 1;if(xx < 0 || xx >= n || yy < 0 || yy >= m) continue; // 越界if(ph[xx][yy] == 0) continue; // 障碍物if(nhp <= 0 || nhp <= in[xx][yy]) continue; // 再走不是较优的 或者 血量不够in[xx][yy] = nhp;vis[xx][yy] = cnt;if(ph[xx][yy] == 4) nhp = 6, ph[xx][yy] = 1;q.push({xx, yy, cnt, nhp});if(ph[xx][yy] == 3) {cout<<cnt;return 0;}}}cout<<-1;
}

在这里插入图片描述

这篇关于P2802 回家的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/864890

相关文章

nyoj 1072 我想回家

一道相当题目描述相当扯的题。 这道题目的描述最后说的是求出到达最后一个点的最短距离,所以输入数据最后输入的城堡的坐标是没用的。 就是先求出两点之间的距离,若不大于村落间距离,并且不大于最后的距离限制 l ,则在两点间建边。 最后任意方法求出最短路即可。 #include <iostream>#include<stdio.h>#include<vector>#include<

面试礼仪 + 5.1回家必带+大学结束感悟

回家必带的: 身份证        采集信息        实习协议     学生证 要买的: 上衣衬衫, 脚部急眼, 教师证现场确认资料:正在准备启闭,下次回家太晚直接去报名 书(EQ太低了) -------------------------------- 回学校答辩4.28号 1: 还是的交流:很多信息不知道, 如答辩步骤,上传最新版论文,。。。。 5月8号成都信息工程

逃离北京回家创业--生存篇

创业的路上,并不总是激情和乐趣。当激情过了,就需要面对赤裸裸的现实。 首先要考虑团队的开销问题,虽然大家拿的工资并不高,但是四个人的工资加上房租水电,对于一个穷苦出身的程序员来说也是个不小的压力。为了给团队找个能够发展下去的持续动力,我想了挺多的办法。 我们在大学城里面创业,大学生是很好的资源。我首先想到的是办培训,我反复思考,我觉得想到了一个非常理想的运作模式。我们创业缺少的是两

逃离北京回家创业--团队组建篇

筹划好了自己的创业项目,然后就开始着手组建团队了。考虑到自己没有太多的资金支持,不能可能去社会上招经验丰富的员工,于是决定自己培养团队。 好在我技术选择的是nodejs和mongodb,前后端都用js开发起来学习成本相对较低。我选择办公地点在大学城,一方面是考虑到这里的房租相对便宜,另一方面这里周边有十几所大学,组建团队也比较方便。大学生虽然不像社会上招的熟练技术人员效率那么高,但是我坚信大学生

快下山的夕阳来招我回家了

也是容易的精美礼品 今天的也是容易的精美礼品,我一定要饲养更多的小生命,快下山的夕阳来招我回家了,脆脆的妙脆角,在鱼缸中惨死,还得到了一份奖品,我早就从同学那里知道了奖品有妙脆角,我把青蛙的皮给扒了,我看见爸爸钓到了鲤鱼,然后。 我的鱼浮沉下去了,他并不真正明白爱,我真为它感到高兴,那他就是一个可悲的人,用青蛙钓鱼,让他它们茁壮成长,我和爸爸依依不舍的回家了,打算去买两条小金鱼回来和它做伴呢

暑假了,我要回家

Description 快到暑假了,XX又开始计划他的暑假回家路线了,XX拿出地图,发现途中有n个点,m条边(双向), XX本来想找一条距离最短的路线回家,但发现由于路况不一样,走同样的距离可能需要不一样的时间, 最后,他决定选择一条时间花费最少的路径,且路径中的每一条边的距离都不超过L (规定1为XX的起点,n为他的终点)。 Input 多组数据。第一行输入三个整数n,m,L

公司废弃的2014年群晖 DS215J 被我打包回家了,试玩一下

文章目录 简介安装查看存储、cpu、内存等信息DMS 学习video station 简介 群晖DS215J https://www.datastoreworks.com/DS215j.asp 下载:chrome-extension://oemmndcbldboiebfnladdacbdfmadadm/https://global.download.synology.com/

刚刚!华为突然传来这一消息,我想辞职回家养猪了!

本文来自腾讯新闻客户端自媒体,不代表本公号的观点和立场。 这是「进击的Coder」的第 115 篇热点新闻 整理:开发者技术前线 来源:开发者技术前线 “ 阅读本文大概需要 10 分钟。 ” 1 对不起,我跟着华为,辞职回家养猪了! 最近这几年,网易养猪了,阿里养猪了,京东养完猪又去种菜了,大家听得耳朵都要起茧了! 但是,今天华为要干的这件事,估计很多人打死都想不到:华为要也要养猪了! 是

HDU4522湫湫系列故事——过年回家(2013腾讯编程初赛3)(AC)

湫湫系列故事——过年回家 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1193    Accepted Submission(s): 254 Problem Description 出门在外,最想念的还是家,对在深圳腾

萍回家了

萍回家了,她走的那天,我没有太多的失落和难过。不再像大学放假时送朋友那样,甚至彼此落泪。要知道,萍等回家的这天等得太久了,四年的思乡心情让她激动,终于踏上了回家的征程......而此前她从没想到过,这一切....是因为遇见了我而发生的。她是那么的欢喜和开心,以至于忘记了车窗外这个我,看着她充满欢喜的笑脸,我默默的感到欣慰!只要她开心,我是多么地满足......