上一页 1 ··· 6 7 8 9 10 11 下一页
摘要: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <map> 6 7 using namespace std; 8 9 #define MAXN 3001010 11 __int64 sum[MAXN];12 int a[MAXN];13 map<int,int> hash;14 15 struct node16 {17 int id,l,r;18 }tree[100010];19 阅读全文
posted @ 2012-09-22 10:27 Missa 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 7 using namespace std; 8 9 #define mid (l+r)>>110 #define ls rt<<111 #define rs rt<<1|112 #define lson l,m,rt<<113 #define rson m+1,r,rt< 阅读全文
posted @ 2012-09-22 00:53 Missa 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 6 using namespace std; 7 8 #define maxn 100005 9 10 struct blo11 {12 int w;13 int d;14 }block[maxn];15 16 bool cmp(const blo&a,const blo&b)17 {18 return a.w+a.d<b.w+b.d;19 }20 2 阅读全文
posted @ 2012-09-21 12:52 Missa 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 题意:求从一个点s 到 一点 e 经过 n 条边的最短路经是多少(可以有重边)贴一个floyd算法讲解:http://blog.csdn.net/niushuai666/article/details/6772706以前一直没仔细想过floyd算法,觉得很简单,今天做这题的时候,看网上的报告都有一句:floyd是每次使用一个中间点k去更新i,j之间的距离,那么更新成功表示i,j之间恰有一个点k时的最短路,如果做N - 1次floyd那么不就是i,j之间借助N - 1 个点时的最短路了。看了很久不明白为什么。也对floyd的最外围的那个k<n产生了疑惑。后来突然想到了,floyd每次更新的 阅读全文
posted @ 2012-09-03 23:24 Missa 阅读(1137) 评论(2) 推荐(0) 编辑
摘要: 终于在9.1号这个开学第一天刷到300题了。虽然我们开学好几天了,慢慢的刷,慢慢的学习也终于到300了。昨天cf的题真的很水,可是各种错啊,,唉,不然说不定都变蓝了。呵呵,这也好,慢慢来,从比赛中学习,以后看题的时候得看仔细了,看题不仔细导致思路错误+wa的时间比写的慢浪费的时间多太多了。。必须得细心,认真啊。细节决定成败。当个教训。以后一定记住要稳。 阅读全文
posted @ 2012-09-01 16:48 Missa 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 求最短路和比最短路大1的路的数量dij松弛的条件改变下,有四种情况1.比最短路短2.等于最短路3.长与最短路但短于次短路4.等于次短路具体见代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <queue> 6 #include <vector> 7 using namespace std; 8 const int inf = 0x3f3f3f3f; 9 const int 阅读全文
posted @ 2012-08-31 13:25 Missa 阅读(1069) 评论(0) 推荐(0) 编辑
摘要: A*算法入门A*算法是一种启发式的搜索,不是纯粹的盲目式搜索,A*算法中有个估价算法g(n),对于每个点而言,都有一个g(n)和h(n)来确定的f(n),实际上就是以f(n)为参考权值来确定搜索的方向,在这里,我们的h(n)表示的是从s点出发到n这个点现在走过的路径长度,而g(n)表示的是从n到e的最短长度的大小,那么就确定了搜索的优先性,这里的A*算法的估价函数g(n)是完美估价,搜索的方向一定是对的。分析:建图的时候建一个正向的一个反向的,反向的图利用dij求终点到每个点的最短路,即为搜索的估价函数。注意的地方:st==en 的时候必须k++ 因为题目要求必须走过路径。详细见代码 1 #. 阅读全文
posted @ 2012-08-30 23:23 Missa 阅读(2156) 评论(1) 推荐(1) 编辑
摘要: A*可以理解成bfs+优先队列,优先队列的权重就是估价函数。。。。原文英文版本点这里翻译原文点这里会者不难,A*(念作A星)算法对初学者来说的确有些难度。这篇文章并不试图对这个话题作权威的陈述。取而代之的是,它只是描述算法的原理,使你可以在进一步的阅读中理解其他相关的资料。最后,这篇文章没有程序细节。你尽可以用任意的计算机程序语言实现它。如你所愿,我在文章的末尾包含了一个指向例子程序的链接。压缩包包括C++和BlitzBasic两个语言的版本,如果你只是想看看它的运行效果,里面还包含了可执行文件。我们正在提高自己。让我们从头开始。。。序:搜索区域假设有人想从A点移动到一墙之隔的B点,如下图,绿 阅读全文
posted @ 2012-08-30 19:37 Missa 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题意:有N头牛,每头牛都会有比他强的或者弱的牛,按照牛的强弱排序,问有几头牛的位置是确定的。5 5(n,m)4 34 23 21 22 5则4>3>2>5 && 1>2>5故只有2,5是确定的。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 #define MAXN 102 8 #define MAXM 4510 9 10 阅读全文
posted @ 2012-08-30 19:03 Missa 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题意:求两点之间的所有路径中的最高点最低的路径的最高点。例如1-> 2 123-> 2 81-> 3 5则输出8。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 #define MAX(x,y) ((x)>(y)?(x):(y)) 8 #define MIN(x,y) ((x)>(y)?(y):(x)) 9 #define inf 0x7f 阅读全文
posted @ 2012-08-30 14:48 Missa 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 题意:有个城市被一条河分成了南北两部分, 它们之间有N+1个航道, 标记为0~N, 每个航道的两端是一个码头, 然后每个码头都只属于一个航道, 航道间也不交叉. 现在给出各航道的航行时间以及同一河岸上各码头间的行走时间, 求出从起点S出发到终点T所需的最短时间.分析:一共有6种点:①点在北岸且不是左右端点, 则它可以往左, 右走, 或通过航道去南岸;②点在南岸且不是左右端点, 则它可以往左, 右走, 或通过航道去北岸;③点是北岸左端点, 则它可以往右走, 或通过航道去南岸;④点是北岸右端点, 则它可以往左走, 或通过航道去南岸;⑤点是南岸左端点, 则它可以往右走, 或通过航道去北岸;⑥点是南岸 阅读全文
posted @ 2012-08-30 13:38 Missa 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 题意:Bessie在一个row*col的矩形区域内滑雪,起点为左上角,已知初始速度v,从a 点到 b 点时,速度变为v(a)*2^(A-B)(A,B为对应点的高度),从 a 到 b 所需的时间为 a 的速度的倒数,她可向前后左右四个方向移动,求其到右下角的最少时间。分析:每点的速度是固定的:例如从a->b->c;则c出发的速度就是V*2^(A-B)*2^(B-C)=V*2^(A-C);时间则是速度的倒数。注意:1、inf要足够大2、因为矩阵内的值范围[-25,25],如果用1<<x的方式求2的幂,很显然这个数会整数超出范围。所以要用__int64t=1; 1 #incl 阅读全文
posted @ 2012-08-29 17:14 Missa 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 题意: 从家到学校,可以步行,可以地铁,最少时间?典型的最短路径。注意三点地方: 一、每两点可达,即使没有地铁,也可以步行的; 二、相邻地铁可达,不相邻不用管(即在同一条地铁线上的两个不相邻站台不用管); 三、地铁线不一定是直的。(WA了好两次)View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 #define inf 0x7ffffff 6 #define eps 1e-8 7 #define MIN(x,y) ((x 阅读全文
posted @ 2012-08-29 00:14 Missa 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 题意:有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 B币。问s币的金额经过交换最终得到的s币金额数能否增加分析:相当于求正权回路,dis[a]表示a点的资金。若dis[b]<(dis[a]-a转化b的手续费)*rate,显然可以更新dis[b]=(dis[a]-a转化b的手续费)*rate。以此类推,如果可以使金额增加,则说明可以存在一个回路不断增加金币数。一点小想法:开始有个想法,那就是觉得正权回路必须经过s,在想怎么判断产生的回路经不经 阅读全文
posted @ 2012-08-28 21:58 Missa 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 原文在这里:http://www.cppblog.com/apple365/archive/2008/11/27/67943.htmlBellman-Ford 算法及其优化Bellman-Ford算法及其优化Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好好思考),而Dijkstra算法只能处理边权非负的问题,因此Bellman-Ford算法的适用面要广泛一些。但是,原始的Bellman-Ford算法时间复杂度为O(VE),比Dijkstra算 阅读全文
posted @ 2012-08-28 21:31 Missa 阅读(238) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 下一页