摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016方法:建立好状态树,状态树中的每一个节点有4个变量,即 1,当前状态为构造最终目标状态使用了什么数字的数组,后文称usedNums。 2,当前状态为构造最终目标状态还可以使用的数字的数组,后文称avaliableNums。 3,当前状态为构造最终目标状态已经构造了多大的长度,也就是该状态节点在树中的层数,后文称layer。 4,目标状态的长度。每一个状态节点使用当前所在层数-1作为下标,取出已经构造好了的usedNums的最后一个数字x。... 阅读全文
posted @ 2013-04-15 14:44 kbyd 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010方法:由于该题搜索的目标状态是准确的状态,即目标状态要求在到达的时候时间刚好是那么多,不能提前到达也不能延后到达,这和时间要在规定时间内或者求最小时间不一样,所以不用广搜用深搜。在深搜的时候要注意几个问题,1.从一个顶点开始向四个方向深搜的之前(要是这个方向可以走的话),要把该顶点设置为不再可走(将该点设置为wall),这样来实现走过的路不能回去再走。而当该顶点四个方向深搜完成后,如果没有找到目标状态,则需要将其还原为可以走,因为有其他顶点开始的深搜会走到该点,而此时该点在这个状态下还没有走过 阅读全文
posted @ 2013-04-15 13:37 kbyd 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1224方法:根据输入数据建立好的图(图中每个顶点会纪录当前累计获取的有趣度和自己本身的有趣度)是不会有回路的有向图,所以可以是用拓扑排序,由于题目输入数据就定下了第一个定点是起点,所以代码中直接从第一个顶点开始扫描的顺序就是拓扑排序的顺序,程序中不需要在进行拓扑排序。按该顺序每访问一个点,就松弛其所有的边,并设置其在最长(短)路径中的前驱。感想:通过聚集分析,时间复杂度是o(v+e).代码:View Code #include<iostream>#include<algorithm 阅读全文
posted @ 2013-04-15 01:11 kbyd 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790方法:用建立有向图的方式建立无向图,调用dijkstra的时候,在优先队列里面的比较以及对边的松弛,都要依次根绝两种权值进行比较。感想:简单题。代码:View Code #include<iostream>#include<queue>//#include<algorithm>using namespace std;int const MAX =0x3f3f3f3f;int cityCount,roadsCount;struct Arc{ int vetex 阅读全文
posted @ 2013-04-15 00:38 kbyd 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874方法:使用邻接表,将两个点之间的所有边都用一条最小费用的边来代表。然后用这些边来建立图并调用DIJKSTRA,最后判断到目标定点的距离是不是正无穷,不是正无穷的值就是最小路径的费用权值。感想:用数组每次排序没有在选择的点的方法来模拟优先队列不好,以后要用堆来模拟。代码:View Code #include<iostream>#include<algorithm>using namespace std;int const MAX =0x3f3f3f3f;int cityC 阅读全文
posted @ 2013-04-15 00:33 kbyd 阅读(197) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示