寻找宝藏【SGOI-14】

news2025/1/21 10:08:26

题目描述

【背景】
据说在意大利的米兰市的地下,埋藏着一堆的宝藏。一天,一个名叫 Shevchenko 的人来到这地下宝库,准备把所有的宝藏都搬回家。当他来到这里时,发现这里是一个迷宫,宝藏埋藏在各个角落,在另一端有个出口,当他每捡到一个宝藏将恢复一定的体力值。
【任务】
由于 Sheva(Shevchenko 的昵称)的体力有限,他必须合理的安排体力,才能既捡完所有的宝藏又能离开这个宝库,现在请你编一程序,帮 Sheva 解决这个问题。在迷宫中每走一格,Sheva 的体力值都会减少一定的数量,如果体力值小等于 0,他将不能再前行。

输入输出格式

输入格式:

第一行输入 Sheva 刚开始的体力值和每走一格消耗的体力值(均为整数)。
第二行输入宝藏的个数 N(N<=10)。
第三行到第 N+2 行每行有3 个数,前两个数为宝藏的坐标 X、Y,第 3 个数为捡到这宝藏将获得的体力值。
下一行输入迷宫的行数 A和列数 B。(A、B<=50)
以下 A行将输入迷宫的地形。0 表示不能走,1 表示可以走(宝藏所在的位置也为 1)。
最后一行输入出口的坐标(起点坐标为(1,1))。

输出格式:

如果 Sheva 能走出迷宫,将只输出一个数,为他所剩的体力值。否则,将输出“no,he cannot”(注意大小写)。

输入输出样例

输入样例#1:

100 1 

1 4 2 
2 4 2 
4 4 2 
5 3 2 
5 5 
1 1 0 1 0 
0 1 1 1 0 
0 1 0 0 1 
0 1 1 1 0 
0 1 1 1 1 
5 5 

输出样例#1:

92

正文

SCOI-14的其他题目都与数论有或多或少的关系,该题目应当是其中较为简单的一道。

题目简意

在图中(1表示可走,0表示不可走)有N个坐标,走到坐标i可增加Ai体力值,另外,每走一步消耗tl体力值,求到终点时最多还剩多少体力值。

算法分析

看数据范围:
 

(N<=10)(A、B<=50)

数据量极小,边权为1,可采用bfs预处理出起点,终点及宝藏之间的最短路径。

时间复杂度:O (N*A*B)

求得后,暴力枚举所有可能的路径,以dfs实现。

时间复杂度:O(N!)

极限数据(N=10,A=B=50)下,算法时间复杂度为O(10!+10*50*50)\approxO(4000000)

#include<bits/stdc++.h>
using namespace std;
int TL,tl,N,n,m,d[20][20],br[60][60],maxn=-0x7fffff,had[20];
bool _map[60][60];
bool vis[60][60];
int dx[5]={0,-1,1,0,0};
int dy[5]={0,0,0,-1,1};
struct B{
	int x;
	int y;
	int add_tl;
}ed,bz[13];
struct S{
	int x;
	int y;
	int step;
};
queue<S> q;
void dfs(int s,int val,int k)
{
	if(k==N)
	{
		maxn=max(maxn,val-d[s][N+1]);
		return;
	}
	for(int i=1;i<=N;i++)
	{
		if(!had[i])
		{
			had[i]=1;
			dfs(i,val-d[s][i]+bz[i].add_tl,k+1);
			had[i]=0;
		}
	}
	return;
}
int main()
{
	cin>>TL>>tl;
	cin>>N;
	memset(br,-1,sizeof(br));
	memset(d,0x3f,sizeof(d));
	for(int i=1;i<=N;i++) 
	{
		cin>>bz[i].x>>bz[i].y>>bz[i].add_tl;
		br[bz[i].x][bz[i].y]=i;
	}
	bz[0].x=bz[0].y=1;
	cin>>n>>m;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>_map[i][j];
	cin>>ed.x>>ed.y;
	bz[N+1].x=ed.x;
	bz[N+1].y=ed.y;
	br[1][1]=0;
	br[ed.x][ed.y]=N+1;
	for(int i=0;i<=N+1;i++)
	{
		q.push((S){bz[i].x,bz[i].y,0});
		memset(vis,0,sizeof(vis));
		vis[bz[i].x][bz[i].y]=1;
//		cout<<i<<":\n";
		while(!q.empty())
		{
			S tmp=q.front();
			q.pop();
			int ux=tmp.x,uy=tmp.y,us=tmp.step;
//			cout<<ux<<' '<<uy<<' '<<us<<endl;
			for(int j=1;j<=4;j++)
			{
				int xx=ux+dx[j];
				int yy=uy+dy[j];
				if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&_map[xx][yy]&&!vis[xx][yy])
				{
					if(br[xx][yy]!=-1) 
					{
						d[i][br[xx][yy]]=d[br[xx][yy]][i]=(us+1)*tl;
//						printf("add_edge(%d,%d,%d)\n",i,br[xx][yy],(us+1)*tl);
					}
					q.push((S){xx,yy,us+1});
					vis[xx][yy]=1;
				}
			}
		}
	}
	br[1][1]=br[ed.x][ed.y]=-1;
	dfs(0,TL,0);
	for(int i=0;i<=N+1;i++)
	{
		for(int j=0;j<=N+1;j++)
		{
			if(i!=j&&d[i][j]==d[19][19])
			{
				cout<<"no,he cannot";
				return 0;
			}
		}
	}
	if(maxn>=0) cout<<maxn;
	
	else cout<<"no,he cannot";
	return 0;
}

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

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

相关文章

【马蹄集】第二十三周——进位制专题

进位制专题 目录 MT2186 二进制&#xff1f;不同&#xff01;MT2187 excel的烦恼MT2188 单条件和MT2189 三进制计算机1MT2190 三进制计算机2 MT2186 二进制&#xff1f;不同&#xff01; 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目…

vue3-模板中的变化

v-model vue2比较让人诟病的一点就是提供了两种双向绑定&#xff1a;v-model和.sync&#xff0c;在vue3中&#xff0c;去掉了.sync修饰符&#xff0c;只需要使用v-model进行双向绑定即可。 为了让v-model更好的针对多个属性进行双向绑定&#xff0c;vue3作出了以下修改 当对自…

SpreadJS 16.2 and SpreadJS 16.1.5 Crack

SpreadJS 16.2 SpreadJS SpreadJS 是一个完整的企业 JavaScript 电子表格解决方案&#xff0c;用于创建财务报告和仪表板、预算和预测模型、科学、工程、医疗保健、教育、科学实验室笔记本和其他类似的 JavaScript 业务应用程序。利用高速计算引擎和 19 种语言的 500 多个 Exce…

源码低代码开发工具:JVS轻应用的基础介绍(OA系统、逻辑编排)

JVS低代码开发平台提供了大量的可配置组件和预先集成的功能&#xff0c;开发人员可以通过拖拽和设置属性的方式&#xff0c;快速搭建应用程序的前端界面和交互逻辑。同时&#xff0c;低代码平台也提供了丰富的后端服务和集成能力&#xff0c;可以轻松地与现有的系统和第三方服务…

Vue 2 动态组件和异步组件

先阅读 【Vue 2 组件基础】中的初步了解动态组件。 动态组件与keep-alive 我们知道动态组件使用is属性和component标签结合来切换不同组件。 下面给出一个示例&#xff1a; <!DOCTYPE html> <html><head><title>Vue 动态组件</title><scri…

夹具、治具、模具零件加工、云MES系统解决方案

夹具、治具、模具零件、自动化零件属于典型的多品种、小批量生产模式&#xff0c;模具零件和自动化零件一般属于单件生产或者散件生产&#xff0c;大部分机械加工企业都有这样的管理困惑&#xff0c;市面上通用的ERP系统和MES系统都无法满足这种多品种小批量、单件加工或散件加…

mysql从传统模式切到GTID模式后启动主从,主从异常报错1236

一 前言 MySQL 的主从复制作为一项高可用特性&#xff0c;用于将主库的数据同步到从库&#xff0c;在维护主从复制数据库集群的时候&#xff0c;作为专职的MySQL DBA&#xff0c;笔者相信大多数人都会遇到“Got fatal error 1236 from master when reading data from binary …

校园跑腿市场行情分析

随着社会的发展和人们生活节奏的加快&#xff0c;校园跑腿市场逐渐兴起并呈现出蓬勃发展的态势。在这个快节奏的时代&#xff0c;越来越多的学生需要在繁忙的学业之外完成各种任务&#xff0c;而校园跑腿服务正是应运而生&#xff0c;为他们提供了便利和时效。本文将从需求方面…

「追风少年」——迈克尔·詹姆斯·欧文要来中国啦!

亚运会前夕&#xff0c;8月23日~25日&#xff0c;世界著名球星迈克尔詹姆斯欧文&#xff08;Michael James Owen&#xff09;将来到杭州和球迷朋友们一起开展签售会以及举办他在中国的直播首秀&#xff0c;届时将有超头部主播加持&#xff0c;享誉世界的「追风少年」将在亚运会…

【vue】项目基础环境搭建、css样式重置与公用

nodejs环境 nodejs是当下前端工程化开发必不可少的环境, 使用 nodejs的 npm功能来管理依赖包 查看node 和 npm的版本 node -v #查看node版本npm -v #查看npm版本 git版本控制 git版本控制工具是目前最为流行的分布式版本管理工具,代码的**提交, 检出, 日志**, 都需要通过git完…

深度分析纳斯达克上市公司慧择的竞争优势和投资价值

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 一、保险行业的现状、竞争与机遇 在疫情期间&#xff0c;很多行业的经营理念与经营方式&#xff0c;甚至客户行为、客户需求都发生了变化&#xff0c;进而催生出新的机遇。保险行业亦是如此&#xff0c;受疫情影响&#xf…

opencv-python使用鼠标点击图片显示该点坐标和像素值IPM逆透视变换车道线二值化处理

OpenCV的鼠标操作 实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback()&#xff0c;即鼠标事件回调 setMouseCallback(winname, onMouse,userdata0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据…

Google API实战与操作

Google api实战与操作 一. Google API 权限配置二. 操作API2.1 引入依赖2.2 导入代码 Google官网 实现一套用java程序控制GoogleAPI实现自动生成监控日报等功能,具体能操作Gsheet及document 一. Google API 权限配置 打开上面官网,新建项目 启用API 搜索sheet及document …

解决umi.js或dva.js中effect函数发生错误dispatch失效的问题

问题背景 在项目的model文件中&#xff0c;通常在effect中进行网络请求等异步操作&#xff0c;当网络错误或者请求结果错误时&#xff0c;以及代码语法错误时&#xff0c;无论是否主动使用throw语句抛出错误&#xff0c;下一次再调用dispatch访问effect中的函数时&#xff0c;…

GRPC 学习记录

GRPC 安装 安装 grpcio、grpcio-tools、protobuf、 pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple常用类型 p…

Spring系列篇 -- Bean的生命周期

目录 经典面试题目&#xff1a; 一&#xff0c;Bean的生命周期图 二&#xff0c;关于Bean的生命周期流程介绍&#xff1a; 三&#xff0c;Bean的单例与多例模式 总结&#xff1a; 前言&#xff1a;今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…

Wlan安全——认证与加密方式(WPA/WPA2)

目录 终端认证技术 WEP认证 PSK认证 802.1x认证与MAC认证 Portal认证 数据加密技术 WEP加密 TKIP加密 CCMP加密 TKIP和CCMP生成密钥所需要的密钥信息 802.11安全标准 WEP共享密钥认证、加密工作原理 WEP共享密钥认证 WEP加解密过程 PSK认证以及生成动态密钥的工…

allegro更新封装如何操作

1、打开brd文件&#xff0c;然后place->update symbols 2、找到要更新的器件

速卖通、阿里国际站需不需要测评?补单或许能带来意想不到的效果

今天和各位聊聊速卖通和阿里国际站&#xff0c;不管新卖家或者老买家都会遇到的各种问题。 首先聊一下新卖家&#xff0c;新卖家店铺刚开&#xff0c;产品先尽可能的去铺开&#xff0c;把店铺规划好&#xff0c;然后就是坐等开单&#xff0c;前期产品上传上去之后是不是感觉流…

比特币凌晨短线暴跌,17万多头爆仓近10亿美元!原因何在?

凌晨5:30AM左右&#xff0c;加密货币短线暴跌。比特币触及24715美元低点&#xff0c;随后回升至26000美元以上&#xff0c;日内跌幅一度扩大至7%以上。以太坊击穿1500美元&#xff0c;现已回调至1650以上&#xff0c;山寨币也出现集体下跌。 此次下跌使比特币市值自6月16日以来…