首页 > 试题广场 >

流浪者与宝藏

[编程题]流浪者与宝藏
  • 热度指数:476 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

牛牛流浪大陆的时候偶然间发现了一个地图和k把钥匙,地图上标出了一些宝藏的位置。

一把钥匙可以开启一个宝藏,获得该宝藏里面的金币,钥匙使用后会被损坏无法再次使用,一个位置(i,j)可能有多个宝藏,但是一个位置只能使用一把钥匙。

因为牛牛是一个精通传送术的流浪者,所以他一步可以走很远。但是他不会走回头路,也不会在一块地方停留。

换言之,如果牛牛当前位于第i行第j列,那么他下一步的位置的行号的范围是[i+1,inf),列号的范围是[j+1,inf)。inf代表无穷大

牛牛最开始位于位置(0,0)

现在牛牛想知道,他最多可以获得多少金币。
示例1

输入

3,3,[1,2,3],[2,1,2],[3,2,2]

输出

4

说明

牛牛一共有三把钥匙,他可以开启(1,2)处的宝藏获得3个金币,但是之后无法再走到有金币的位置
他也可以先开启(2,1)处的宝藏获得2个金币,再开启(3,2)处的宝藏获得2个金币,总共获得4个金币。

备注:

第一个参数n代表宝藏的个数
第二个参数k代表钥匙个数
第三个参数x包含n个元素,代表n个宝藏的行号
第四个参数y包含n个元素,代表n个宝藏的列号
第五个参数a包含n个元素,代表n个宝藏内的金币数量。
头像 曾经不是人
发表于 2020-07-12 22:03:21
处理输入。 题目中提到一个点可能有多个宝藏,但一个点只能取一个宝藏,显然同一个位置只需保留最大的那个宝藏。 我们开一个500*500的数组作为地图 map。map记录点上最大宝藏的金币数。 动态规划。 构建状态空间 站在一个中间位置向后看,我们发现此时能影响到后 展开全文
头像 摸鱼学大师
发表于 2021-08-10 17:59:05
思路: 题目的主要信息: x和y是位置坐标数组(位置可能会重复),a为其对应的金币数,k为钥匙数量 从(0,0)开始,每次行动时进入下一步行号列号都要至少加1,到达一个地方,需要用一把钥匙开启宝藏,获得金币 钥匙有限,求能够获得的最大金币数,同一个一个地方只能访问一次 可以利用贪心思想,用矩阵记 展开全文