Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

剪枝方法大致见内

Posted by alpc04 at 2006-08-07 17:32:52 on Problem 2936
In Reply To:那怎么剪枝啊? Posted by:huacm01 at 2006-08-06 18:09:35
根据输入字符串可得到一个a*b的活动区域 一般的这个区域要比6*6小

因为棋盘的边框也可以看做wall 所以让活动区域贴着棋盘的角时可以得到最优
起始位置的枚举就是4次 远小于36次枚举

wall的枚举就在a*b的活动区域中进行就行
把wall之间的intersection和wall和input之间的cross剪枝掉
但有些wall的长度>max(a,b) 要再处理一下

枚举出wall和startpoint之后把B题的代码cp过来做BFS 但因为B题本身就是Spj题目所以直接得到的序列可能和输入字符串不同 就会出错
这时不用再做类似spj的判断 把B题的代码改一下就好了--把输入字符串第i步的方向作为BFS第i层的优先方向先压入队列即可(有点估价函数的感觉)

我就是这样剪枝的 G++ 93ms
应该还有更好的剪枝
大牛指教!

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator