《新手的DOTA》解题报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《新手的DOTA》解题报告
作者声明:
当动态规划维数进一步增大或不定时,标准解答方法为最大流。
新手的DOTA
By
sx349
[
题目背景]
DOTA是Defense
of
the
Ancients的缩写,是一个基于魔兽争霸的多人实时对战自定义地图,可以支持10个人同时连线游戏。DOTA以对立的两个小队展开对战,最多为5v5。每个玩家仅需要选择一个英雄,并通过控制该英雄来摧毁对方小队所守护的主要建筑(远古遗迹),以取得最终胜利。
[
题目描述]
A君是暴雪公司的忠实FANS,也算是个war3的老手了,自从接触到了DOTA之后,感觉这更适合自己这样的微操狂人。于是,A君拉上了四个死党,也开始接触DOTA了。
既然是新手,首先就是要熟悉一下界面、英雄……等等。在经过一番恶补之后,A君率先出师,随后大家也纷纷学成。接下来,就要进行实战演练拉。
五个新手立刻进入游戏,很不幸,他们下载了一张非AI版地图(这也是很多新手遇到的尴尬)。作为这个小团队的领导者,A 君决定,先来一局5V0(五英雄对零英雄),进行一次试练。
在整张地图上不仅有对方一拨拨的小兵,还有很多的野外中立兵。五个新手经过讨论,决定分别找出一条从自己老家(坐标为1,1)通往敌方老家(坐标为N,N)的路,一波RUSH直接结束战斗。显然,敌方老家是很难打得(尤其是有强大的通灵塔守护)。所以,他们希望英雄在路上能够尽可能多地MF,尽可能的练到更高等级。
假设我们已经知道了整张地图的大小N以及所有兵力配置(只是开了一下全地图可见……),五个英雄依次出发,每一次向右或向下移动一格,直到到达敌方的远古遗迹。如果某个地点已经被到达过,那么到达这一地点的英雄必然会杀死所有的处于该地点的单位,而且不再刷新。当然,由于我们的英雄等级都不会太高,所以每一格中的单位数量也不会超过10000个,不然的话……
A君想知道,他们这一波RUSH最多能解决掉多少单位?
[输入格式]
第一行是一个整数N,表示整张地图(正方形)的边长。
第二到N+1行,每行有N个数字,表示地图中每个点的兵力配置。
[输出格式]
输出一个整数S,表示最多能解决掉的单位。
[输入样例1]
3
1
2
3
2
3
4
3
4
5
[输出样例1]
27
//所有的单位都被解决了
[输入样例2]
2 5 6 7 9 1 6 4 8 6 8 4 1 6 9 8 4 8 1 6 8
1
6
9
8
7
4
6
3
8
4
1
3
1
[输出样例2]
181
//除了右上角的一个单位以外全部解决了
[数据范围]
对于50%的数据,有0x[i-1]时,x[i]必然与前i-1个X值不同,此时map[x[i],k+1-x[i]]也会被经过。将所有经过的点的单位数相加,即为pare函数的值。
到此为止,就是本道题核心算法的框架结构。
[程序清单]
program
dota;
const
maxn=10;
var
f:array[12*maxn-1,0maxn,0maxn,0maxn,0maxn,0maxn] of
integer;
i,j,k,x1,x2,x3,x4,x5,n:longint;
dx:array[132,15]
of
integer;
map:array[1maxn,1maxn]
of
integer;
procedure
pare(k,x1,x2,x3,x4,x5:longint);
var
x:array[15]
of
longint;
i,j,t:longint;
begin
x[1]:=x1;x[2]:=x2;x[3]:=x3;x[4]:=x4;x[5]:=x5; for
i:=1
to
4
do
for
j:=i+1
to
5
do
if
x[i]>x[j]
then
begin
t:=x[i];
x[i]:=x[j];
x[j]:=t;
end;
inc(f[k,x1,x2,x3,x4,x5],map[x[1],k+1-x[1]]); for
i:=2
to
5
do
if
x[i]x[i-1]
then
inc(f[k,x1,x2,x3,x4,x5],map[x[i],k+1-x[i]]); end;
begin
read(n);
for
i:=1
to
n
do
for
j:=1
to
n
read(map[i,j]); k:=0;
for
x1:=0
to
1
do
for
x2:=0
to
1
do
for
x3:=0
to
1
do
for
x4:=0
to
1