寻宝任务
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

你派遣了一个机器人去执行危险任务,现在机器人被困在一个二维迷宫里。
每个迷宫单元格要么是空的,要么有一个宝箱。没有两个宝箱有相同的金额,也就是说,它们都是不同的金额。
你想让机器人将宝箱带回,但机器人只能带回一个宝箱,显然,你会想带回金额最高的那一个,但他可能没有足够的能量到达这个宝箱的格子,所以你可能不得不考虑带回较低金额的宝箱。
机器人开始时充满了能量。
下面3*3的矩形显示机器人进入八个相邻单元格所需的能量(不要问为什么消耗的能量不同)

(注意机器人不能走出边界)。
如果机器人想要向上移动,它需要2个单位的能量;如果他想向下移动,这需要6个单位能量。
如果机器人遇到一个宝箱,那么这个箱子就是你得到的,任务就结束了,即使机器人还有能量可以继续移动。
显然,只有当机器人有足够的能量来移动时,才可以移动。
当机器人采取行动时,它的能量就会消耗。
你要确定机器人能得到的最高金额。请注意,机器人不必使用所有的能量。

输入描述:

第一个输入行包含五个整数:
-Rm(2≤ Rm≤ 500)表示迷宫中的行数;
-Cm(2≤ Cm≤ 500)表示迷宫中的列数;
-Rp(1≤ Rp≤ Rm)表示机器人的起始位置的行号;
-Cp(1≤ Cp≤ Cm)表示机器人的起始位置的列号;
-Ep(1≤ Ep≤ 106)表示机器人的起始能量。
假设机器人的起始位置是有效的(即它在迷宫中),并且该单元格不包含宝箱。
接下来的Rm个输入行,包含Cm个整数(每个整数都在0和106之间,包括0和106)。
每个输入行描述迷宫中的一行,表示单元格内容:零表示那里没有宝箱;非零表示宝箱(箱中的金额)。
假定迷宫中至少有一个宝箱,机器人有足够的能量到达最少一个宝箱。

输出描述:

输出机器人能得到的最高金额。
示例1

输入

复制
4 3 2 3 50
0 0 0
0 0 0
0 0 10
0 20 0

输出

复制
20