上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 32 下一页
摘要: 选拔赛的题目,关键路径继续延续着比赛的时候做不出,一回宿舍就1A的悲惨命运。这题题意还是很易懂的,不说题意了,然后一看就是一个关键路径。一个例子就是造汽车,造各种零件的时间不同,要凑齐一些零件后才能造另一些零件,问最后汽车最早什么时候造完。有个关键就是,如果一些零件还没有造完,而你手头上有事情可做,那么就去做,千万不要等那个零件,这样就是最优的。如果手头上没有事情可做,都是在等待的,那么只好等待了,而等待到某一个事情能开始做了,那么就做去做,就变回了上面的那种情况,但是要记得把刚才等待的时间算上去这个其实算是模板题,关键路径大家都学过,但是不一样都做过题,我细想才发现原来我没做过这类题只是知道 阅读全文
posted @ 2013-03-23 20:56 Titanium 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 可能要求解两种问题,一种是完成所有的任务的最早时间,这个其实只是求解关键路径问题的一部分,另一种是要输出关键路径(关键路径不一定是唯一的)定义:关键路径就是求始点到终点的一条最长路径,通过求各顶点的最早完成时间来求关键路径两个重要概念(容易混淆,容易越想越糊涂)1.最早完成时间:自始点(记为V1)开始沿最长路径(按权计算)到达Vi所需要的时间,成为Vi的最早完成时间,记为TE[i] TE[1]=0; (准确来说应该是拓扑排序中的第一个点为0,而第1个点不一定只有1个,而且编号不一定为1,这里只是举一个例子,另外时间也不一定是0,看从什么时候开始计时) TE[j] = max (TE[i] .. 阅读全文
posted @ 2013-03-23 20:55 Titanium 阅读(819) 评论(0) 推荐(0) 编辑
摘要: 最小路径覆盖先把相同的数字去掉即去重,按整除或者被整除关系建立有向图,可知这个有向图一定是无环的(DAG),转化为最小路径覆盖模型#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX 1010bool vis[MAX];int mat[MAX];long long a[MAX];int first[MAX];struct edge{ int u,v,next;}e[MAX*MAX];int nume;void add(int u , int 阅读全文
posted @ 2013-03-23 12:33 Titanium 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 最小点覆盖和最小路径覆盖的定义就不说了,百度可以找到但是百度一般找不到证明,而且很多证明可能是错的,或者不严谨后来在Matrix67博客找到了最小点覆盖的证明,是看过最严谨的了下面是原文地址http://www.matrix67.com/blog/archives/116但是最小路径覆盖还是找不到可靠的证明,不过幸好黑书中有提及,虽然不详细,但是如果看明白了最小点覆盖的证明,最小路径覆盖也不难了下面是黑书的原文,关于最小路径覆盖的证明最小路径覆盖:用尽量少的不想交的简单路径覆盖有向无环图G的所有顶点。我们给这个图建立一个二分图模型,把所有顶点拆为两个:X结点i和Y结点i‘,如果图G中存在有向边 阅读全文
posted @ 2013-03-23 12:30 Titanium 阅读(1121) 评论(0) 推荐(0) 编辑
摘要: 线段树求矩形面积和,模板题(数据全部为整数)#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX 10010#define LCH(n) ((n)<<1)#define RCH(n) ((n)<<1|1)struct segment{ int l,r,h,f;}ss[2*MAX];struct node{ int l,r,cnt,len; int mid() { return (l+r)>>1; }}tt 阅读全文
posted @ 2013-03-21 22:22 Titanium 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 线段树求矩形面积并经典题目,poj 1151 是相同的题目。终于学了求矩形面积并,详细说一下。首先是看小hh的线段树专题,因为找不到什么论文来看所以只好啃他的代码,啃了一个晚上,有感觉,但是不确定,只能轻轻体会到扫描线的意义。后来啃不下去了,就自己想,给想了出来,但是想出来居然是跟原始的方法不同的。所以下面说的是原始的方法(或者说是小hh代码中的方法),以及我自己想出来的一种方法,两种虽然不同,但是个人感觉本质还是差不多的,不过从效率上看,小hh的那种代码应该效率更高。另外下面给出的代码都是用线段树来模拟扫描法,其实还有更好的方法就是用DP的思想去优化,据说效率提高不是一点两点而是很多,但是还 阅读全文
posted @ 2013-03-21 10:57 Titanium 阅读(4211) 评论(4) 推荐(1) 编辑
摘要: 树型DP入门题题目链接:http://acm.sjtu.edu.cn/OnlineJudge/problem/1077•设f(i,j)中序遍历为i,i+1,…,j的二叉树的最大加分,则有: f(i,j)=max{f[i,k-1]*f[k+1,j] +d[k]}•显然 f(i,i)=d[i]•答案为f(1,n)•1<=i<=k=<=j<=n•时间复杂度 O(n3)•要构造这个树,只需记录每次的决策值,令b(i,j)=k,表示中序遍历为i,i+1,…,j的二叉树的取最优决策时的根结点为k最后前序遍历这个树即可。/*树型DP*/#include <cstdio># 阅读全文
posted @ 2013-03-18 19:05 Titanium 阅读(850) 评论(0) 推荐(0) 编辑
摘要: 推荐技术公众号:不爱睡觉的大猪 容斥原理 题意:给n*m的矩阵有点,左下角的点为(1,1),右上角的点(n,m),(其实转回来也是没影响的即m*n),一个人站在(0,0)看这些点,在一条直线的视线上,它只能看到最前面的那个点,后面的点将会被档住他看不到,问你,这个人一共能看到多少个点。 这个问题只要 阅读全文
posted @ 2013-03-18 15:22 Titanium 阅读(1428) 评论(5) 推荐(0) 编辑
摘要: 枚举子集+模拟2012国赛简单题。题意有n*n的点,有一些点是空地可以放稻草人保护稻草,稻草人有保护范围,就是距离为r的曼哈顿距离。问要保护所以的草最少要多少个稻草人,输出最少个数,如果全部放入都不能全部保护则输出-1这题有坑,不过代码写得好的话,坑是可以避免的,不需要特判。1.可以能一个空地都没有即不能放稻草人,所有稻草都无法收到保护,输出-1。2.所有点都是空地,全部放稻草人,这样的话答案是0,因为根本没有草不需要保护。2.注意一点,我就是为此WA了好多次,空地是不需要保护的!比如枚举了放置的稻草人并把受保护的点染色为1,如果有些点为0,并不一定是失败,可能那个点是空地,虽然它没有放稻草人 阅读全文
posted @ 2013-03-18 13:01 Titanium 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 最大流最小割分析都在代码注释中/*题意:对于一个有向图的最大流,在每条流路中,只能修改一条边,使得修改后,整个网络的最大流可以增大,问有多少条这样的边注意一点,在一条流路中只能修改一条,好像s->1->2->t,假设每条边的容量都是2,那么最大流的流路只有一条,但是这条流路中,要想增大一条边的容量而使整个网络的最大流增加是不行的,一定要把所有边容量都增大,这与题意不符,所以这个case输出是0,表示1条都没有首先我们运行一次最大流,得到最终的残余网络,那么我们怎么找到我们要的割边呢?首先割边一定已经是满流的了,假设我们得到一条满流的边u->v如果源点s可以到达点u,且点 阅读全文
posted @ 2013-03-15 23:53 Titanium 阅读(374) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 32 下一页