Advertisement

UVa 1622机器人

阅读量:

题意:
在一个尺寸为r * c的网格中(1 <= r , c <= 1e5),该网格由多个1 * 1的小格子组成,每个格子初始都配备了一个机器人。可以通过发送n、s、w、e指令,使所有机器人分别向上、向下、向左、向右移动。一旦机器人移出网格边界,便会爆炸并永远不再响应后续指令。目标是计算能够执行的最大指令数量。可能题目描述存在不够清晰之处,我们通过一个样例来进一步说明。

例如输入为2 2 1 1 1 1
表示网格大小为2 * 2,共有四个机器人,每个方向分别有1条指令。
最优策略如下:

  • 首先执行向上指令,此时有4个机器人可以响应并移动;
  • 接着执行向下指令,此时有2个机器人仍处于网格内并可执行该指令;
  • 然后执行向左指令,此时仍有2个机器人未被移出边界;
  • 最后执行向右指令,此时仅剩1个机器人能够响应。

因此总共有9条指令被执行。

在明确题目含义之后,我们进一步分析问题的解法。

分析:
Step1
在这一阶段,大家最容易想到的是对n >= s以及w >= e的情况进行讨论。如果这些条件不满足,则可以通过交换两个方向的值来处理,并且这种交换不会影响最终结果。

当r > c时,反复进行上下移动直到s = 0时可能是最优选择。但需要特别注意n >= s + 1的情况,在这种情形下可以将x * y加入到计算中。为了更直观地展示这一思路,我绘制了一幅

全部评论 (0)

还没有任何评论哟~