01 2013 档案
摘要:很好的一道题。。。一次水过。。。不过效率不是很高。。都2000MS+了。。。orzView Code 1 #include<iostream> 2 #include<map> 3 #include<string> 4 const int N=220; 5 const int inf=1000000; 6 using namespace std; 7 8 int visited[N]; 9 int edge[N][N];10 int dist[N];11 map<string,int>mp;12 13 void Dijkstra(int v0,in
阅读全文
摘要:求无向图的最小环。。。。floyd。。。。具体见代码。。。View Code 1 #include<iostream> 2 const int N=111; 3 const int inf=1000000; 4 #define min(x,y) ((x<y)?(x):(y)); 5 using namespace std; 6 7 int dist[N][N]; 8 int edge[N][N]; 9 int n,m;10 11 void floyd(){12 int ans=inf;13 for(int i=1;i<=n;i++){14 for(int j...
阅读全文
摘要:虽然在学数据结构的时候看过并查集。。。好像是在Kruskal算法中讲到了,不过做题中用到这还是头一次。。。哎,acm有太多的第一次了。。。不过生命不休,学习不止。。。好吧。。。不多说了。。。View Code 1 #include<iostream> 2 #include<algorithm> 3 const int N=1010; 4 const int inf=1000000; 5 using namespace std; 6 7 struct Road{ 8 int st,ed,pd; //起点,终点、速度 9 };10 11 int cmp(const Road
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548就是Dijkstra算法的应用。。。。不过被坑了好久,原来电梯的up、down是并列的,初始化的时候出错了。。。。调了好半天。。突然醒悟过来了,,,orzView Code 1 #include 2 #include 3 const int N=220; 4 const int inf=1000000; 5 using namespace std; 6 7 int edge[N][N]; 8 int dist[N]; 9 int visited[N];10 int n,A,B;11 12 ..
阅读全文
摘要:在做过hdu 1358之后,若菜对floyd也有了更深的理解,学过数据结构的都知道,floyd是用于求每一对顶点之间的最短距离(当然你也可以用dijkstra来求,只不过floyd形式更简单)。。。好吧,先说说我的理解吧,其实floyd本质上还是dp,如果要求顶点vi到顶点vj的距离,那么,我们可以在vi,vj之间引入一个最大点vk,通过vk求出vi到vj的距离的最小值,当然1 2 const int N=100; 3 const int inf=100000000; 4 using namespace std; 5 6 int cost[N]; 7 int edge[N][N]; 8 in.
阅读全文
摘要:题目是这样的,貌似一开始我这个英语搓的人还理解错了。。。orzhttp://acm.hdu.edu.cn/showproblem.php?pid=1142就是最短路,只不过用dijkstra是从终点到源点,然后再dfs从源点开始搜。。。好吧,这个记忆化搜索还是挺好用的。。。View Code 1 #include<iostream> 2 #include<cstring> 3 const int N=1010; 4 const int inf=99999999; 5 using namespace std; 6 7 int edge[N][N]; 8 int dist[
阅读全文
摘要:刚刚做过hdu 1455那道搜索题,在来做这道,那就像切菜一样。。。,orz,让我这种若菜也体验了一把切题的乐趣。。。。好吧,还是说一下大意吧。。。这次是为正方形了。。。就是所有的木棒从头到尾相连,判断能否组成一个正方形。。。搜索过程没有像1455那题有那么多的剪枝。。。orz,我是直接暴力的。。。还是上代码吧。。。 1 #include 2 #include 3 using namespace std; 4 5 struct stick{ 6 int length; //长度 7 int mark; //标记是够被使用过 8 }; 9 stick sticks[2...
阅读全文
摘要:讲的大致是几根原本长度相同的木棒,然后被某人当出气筒剪啊剪啊,剪成好几段,然后,好吧,这时间一长记性就差了,忘了原来这堆木棒的长度。。。orz,我这若菜,也只能帮您推算出原来这堆木棒的可能的最短长度了。。。搜索中的经典之经典,必须掌握啊。。。。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 struct stick{ 7 int length; //长度 8 int mark; //标记是否被使用过 9 };10 stick sticks[64];11 int n,num,sum;12 13 int...
阅读全文
摘要:hdu 1401 从昨天晚上就在做这道题了,orz,被坑了这么久,原因一直是MLE。。。。欲哭无泪啊,改来改去,还是不能减少内存,后来,我发现其实我太二了,八维数组,我居然用的是int ,orz,难怪MLE,改成char 就不超了。。。哎呀,得长记性了。。。。话说,这是我做的第一道DBFS,其实和BFS本质上还是一样的,就是多了一个判断,不过效率确实高了。。。orz。。。还是直接贴代码了。。。 1 #include<iostream> 2 #include<algorithm> 3 #include<queue> 4 #include<cstring&
阅读全文
摘要:一道搜索题,关键是不能有重复的出现。。。 1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 5 int t,n,flag; 6 int num[14],save[14]; 7 8 int cmp(const void *a,const void *b){ 9 return (*(int *)a)>(*(int *)b);10 }11 12 void dfs(int i,int sum,int count){13 if(sum>t)14 return ;15 if(sum...
阅读全文
摘要:这个题目我就不说,链接在这里http://acm.hdu.edu.cn/showproblem.php?pid=1254主要我想说的是,一开始是我用2个三围数组来分别标记人和箱子走过的四个方向,但不知怎么回事行不通。。。于是就用一个四维数组来标记状态,嘻嘻,过了。。。好吧,还是直接上代码了。。。。 1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 5 using namespace std; 6 int visited[8][8][8][8];//记录人和箱子的状态 7 int map[
阅读全文
摘要:hdu上的这道题可把我给坑惨了,一直都是runtime error,思想我感觉没错,可惜一直找不到原因。。。。好吧,看的我眼都快花了,直接贴代码了,bfs+位压缩。。。所谓的位压缩就是用一个整数来保存几个事物的有无状态。我们知道每个整数对应一个二进制,二进制就是01串,而0对应的就是无,1对应有,这样几个事物的有无就可以确定一个二进制串,进而可以确定一个整数。故用整数保存几个事物的有无状态。假设已知一个整数m,要判断事物n(n是编号,从1开始)是否存在,可以进行&运算:m&1<<n-1,如果运算结果为0,则n不存在,如果运算结果非0,则n已存在。如果n不存在,要把n
阅读全文