精灵吃糖果【map】
作者:互联网
题目描述
有一个矩形网格形状的仙界棋盘(n行m列),棋盘上的每个方格都放有不同种类的糖果,糖果种类各不相同,每个糖果用一个字符(除空格外)来表示。有一个小精灵来到了这个仙界棋盘,她想吃到方格中的糖果,但是这里有一个吃糖果的规则,必须按照给定的顺序吃糖果,小精灵在移动的过程中每移动一格需要耗费x个能量,每转向一次耗费y个能量,吃一次糖果需要耗费z个能量。小精灵初始位置在左上角,请问如果她要按照给定顺序吃到糖果,最少需要耗费多少体力?
输入
第一行有5个整数n,m,x,y,z,用空格隔开,其中0 < n*m < 95,1 <= x, y, z <= 100000。
后面n行,每行一个由m个字符组成的字符串,表示糖果的排列。
最后一行一个由糖果字符组成的字符串,长度不超过100000。
输出描述
一个整数,表示最少需要的时间。
测试样例
输入
2 2 1 1 1
AB
CD
BBCDAC
输出
15
题解
要使小精灵耗费的能量最少,实际上是求曼哈顿距离,在移动的过程中,判断是否需要转向即可。
这个题的难点在于如何得到每种糖果的坐标,这里使用了map来存储,map的key为糖果字符,value为一个二维数组(存储行列坐标)。
如果起始点相同,则只需要吃糖果消耗的精力;只有起始点所在行和列都不同,才需要转向。
代码
// java
标签:map,需要,精灵,小精灵,棋盘,糖果,耗费 来源: https://blog.csdn.net/Aibiabcheng/article/details/120243620