其他分享
首页 > 其他分享> > 精灵吃糖果【map】

精灵吃糖果【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