网站大量收购独家精品文档,联系QQ:2885784924

[计算机]《新手的DOTA》解题报告.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机]《新手的DOTA》解题报告

作者声明: 当动态规划维数进一步增大或不定时,标准解答方法为最大流。 新手的DOTA By sx349 [题目背景] DOTA是Defense of the Ancients的缩写,是一个基于魔兽争霸的多人实时对战自定义地图,可以支持10个人同时连线游戏。DOTA以对立的两个小队展开对战为5v5。每个玩家仅需要选择一个英雄,并通过控制该英雄来摧毁对方小队所守护的主要建筑(远古遗迹)。 边界条件为f(1,1,1,1,1,1)=map[1,1]。 接着考虑compare函数的值,它代表从前一状态到达这一状态后,多增加的杀怪数。由于同一个地点的单位只能完全被杀一次,所以当两个英雄所在的格子在同一点,即X值相等时,所加的单位总数只添加该格单位数量一次。 我们将五个英雄的X值从小到大排序,用数组x记录。首先可以确认map[x[1],k+1-x[1]]必然会被经过;随后,由于数组是由小到大排列,所以当x[i]x[i-1]时,x[i]必然与前i-1个X值不同,此时map[x[i],k+1-x[i]]也会被经过。将所有经过的点的单位数相加,即为compare函数的值。 到此为止,就是本道题核心算法的框架结构。 [程序清单] program dota; const maxn=10; var f:array[1..2*maxn-1,0..maxn,0..maxn,0..maxn,0..maxn,0..maxn] of integer; i,j,k,x1,x2,x3,x4,x5,n:longint; dx:array[1..32,1..5] of integer; map:array[1..maxn,1..maxn] of integer; procedure compare(k,x1,x2,x3,x4,x5:longint); var x:array[1..5] 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 do 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 do for x5:=0 to 1 do begin inc(k); dx[k,1]:=x1; dx[k,2]:=x2; dx[k,3]:=x3; dx[k,4]:=x4; dx[k,5]:=x5; end; f[1,1,1,1,1,1]:=map[1,1]; for i:=2 to n do for x1:=1 to i do for x2:=1 to i do for x3:=1 to i do for x4:=1 to i do for x5:=1 to i do begin f[i,x1,x2,x3,x4,x5]:=0; for j:=1 to k do if f[i-1,x1-dx[j,1],x2-dx[j,2],x3-dx[j,3],x4-dx[j,4],x5-dx[j,5]]f[i,x1,x2,x3,x4,x5] then f[i,x1,x2,x3,x4,x5]:=f[i-1,x1-dx[j,1],x2-dx[j,2],x3-dx[j,3],x4-dx[j,4],x5-dx[j,5]]; compare(i,x1,x2,x3,x4,x5); end; for i:=n+1 to 2*n-1 do for x1:=i-n+1 to n do for x2:=i-n+1 to n do for x3:=i-n+1 to n do for x4:=i-n+1 to n do for

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档