zoj 1649 Rescue

来源:互联网 发布:网络用语沒毛病怎么回 编辑:程序博客网 时间:2024/06/05 03:51

 

又是类似骑士拯救公主,不过这个是朋友拯救天使的故事。。。

 

不同的是,天使有多个朋友,而骑士一般单枪匹马比较帅~

 

求到达天使的最短时间,杀死一个护卫1 units time , 走一个格子 1 unit time 。SO,杀死一个护卫到达那个格子 2units time。

 

第一反应是广搜,就搜咧 = =。。

 

WA了,交hdu上 AC了,hdu数据真弱啊。。。

 

想了想,想通了,因为一般广搜的话必须都是1个时间才能搜,才能保证这个BFS树是等距离向外伸展的,而这个不是等距离的,所以需要一些处理。

 

1、我的方法是,找到天使后,把时间比下大小,最后输出最小的。需要优化,只这么做的话,会TLE的,如果走过一个格子,这个格子存走过时候的时间,下次再走到这个格子,如果时间比格子里的短,就入队,否则,就不用入队了。60MS。

 

2、网上看到另一种方法,就是把杀护卫和走到护卫那个格子看成两个动作等于说是入队两次,这个好啊!!!写了半天终于写出来了。20MS。

 

3、刚才想起来一种方法,因为如果等距离的BFS的话,队列里的time值是从小往大排的,那我直接用优先队列就可以了哈~~嘻嘻~10MS~人品好,爆0MS了~~

 

法I

 

 

 

法II

 

 

 

法III

 

 

原创粉丝点击