摘要: 题目链接动态规划题,题目大意,有n个城市,一个人从第一个出发,每天可以选择继续呆在当前城市或者转移到其他城市(可以把继续呆在当前城市看成从当前城市转移到当前城市),第i天呆在第j个城市的收入为in[i][j],从第i个城市转移到第j个城市的费用out[i][j],求m天后的最大收入。把第k天的收入与第k-1天的收入联系起来即可写出状态转移方程。用c[i][j]保存i天过后最后呆在城市j的总收入,c[i][j]=MAX(c[i-1][k]+in[i][j]-out[k][j],k=0,1,...n-1),注意到从第一个城市出发,所以边界为第一天结束时的收入。View Code 1 #inclu. 阅读全文
posted @ 2012-04-03 23:00 BeatLJ 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目的本质就是求最长不下降子序列,这是动态规划的典型,很容易写出O(n2)的算法,但由于MAX=40000,普通算法会超时,必须采用更快的算法。下面简单介绍求最长不下降子序列(可推广到其他类型)的O(nlogn)算法。假设数字序列为a[N](也可不用保存,一边读入一边处理),先介绍如何求以第一个元素开头的最长不下降子序列,我们会用到一个数组d[N],d[k]保存的是数组a中以第一个元素开头的所有长为k的不下降子序列最后一个元素的最小值(下面将简称为最小最后元素),显然d的长度len即为所求。而且容易用反证法证明这个数组是递增的,若存在i<j,且d[i]>d[j],可以这样想 阅读全文
posted @ 2012-04-03 22:31 BeatLJ 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 题目链接这题大意是给一个有向图,求至少给多少个结点发消息能使消息传遍整个网络,并进一步求出至少添加多少条边能使对图中任意一个结点发消息都能使消息传遍整个网络。可以先用kosaraju将强连通分支缩点,得到原图的基图,然后统计入度为0的连通分量个数和出度为0的连通分量个数,入度为0的必须给它发消息,入度不为0的不必给发消息,所以第一问所求即为缩点后的图中入度为0的个数,至于第二问,只需将入度为0的结点与出度为0的结点连接即可满足要求,最少需加边数目为两者之中的较大者,需注意的是,单只有一个连通分量时,输出结果为0 。这题第一次提及后TLE,原因竟是N不够大,为什么不是RE呢?View Code 阅读全文
posted @ 2012-04-02 16:05 BeatLJ 阅读(529) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目大意,给定一个有向图,按顺序输出“自己可达的顶点都可到达自己”的顶点。由于没有按顺序输出,WA了一次。View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <memory.h> 4 #define CLR(a) (memset(a,0,sizeof(a))) 5 #define N 5001 6 struct node 7 { 8 int v; 9 struct node *next; 10 }; 11 struct node *in[N],*out[N]; 12 char 阅读全文
posted @ 2012-03-31 23:30 BeatLJ 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目大意,给一个有向图,求是否任意两点都单向联通。这题我用的是两次dfs求强连通图,将强连通分量缩成一个点,然后对缩点后的有向图进行拓扑排序,判断单项连通。因为一个小错误,WA了3次,第一次dfs时是求各点的后根遍历次序(时间戳),但是是以第cnt次访问的是第v个结点的形式来保存,这样可以很方便从访问次序找相应结点,便于第二次dfs。我在写的时候,不小心就写成了保存第v个结点的时间戳,自然就错了。View Code 1 #include <stdio.h> 2 #include <memory.h> 3 #define CLR(a) memset(a,0,siz 阅读全文
posted @ 2012-03-31 22:38 BeatLJ 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 题目链接求一个无向图的桥(可能存在重边),输出割边的数目,并按顺序输出割边的序号(输入的顺序)。由于有重边,一般需要使用邻接表来存储,我一开始嫌麻烦,想使用邻接矩阵和边集来存,没注意到节点数目太大,结果MLE。最终还是得用邻接表,写好后,有贡献了一次PE,改正格式后居然WA了,经检查在插入边时有点问题,插入时要先查找该边是否已出现,当初使用的是if(findEdge(a,b)==0&&findEdge(b,a)==0)来判断边是否已插入,后来发现这个不能保证findEdge(a,b)和findEdge(b,a)都会执行,改成if(findEdge(a,b)+findEdge(a 阅读全文
posted @ 2012-03-30 16:18 BeatLJ 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 上一周就把基于遗传算法的机器人路径规划在matlab中实现了,但是缺点很多,比如说栅格地图是10*10的,比较小,运行时间比较长。这一周主要在考虑怎样优化,虽说进展缓慢,但还是改善了不少。今天突然想到可以把不同长度的路径放到元胞数组中,这样就不必维持路径的长度了,需要时直接使用length就行了,没想的是这样一个小小的改动居然使效率大大提高,现在搜索20*20的栅格效果都比较好,但搜索30*30的效果还不行。主要是初始化路径比较费时,有时还会初始化失败。即使降低障碍栅格比例,可以加快初始化路径的速度,但是搜索出的路径却不是很理想,有时候能一眼看出走了弯路。我觉得关键问题还是路径的初始化和路径的 阅读全文
posted @ 2011-09-25 22:56 BeatLJ 阅读(329) 评论(0) 推荐(0) 编辑
摘要: <embed src="http://www.tudou.com/v/geUXaJyXATE/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed> 阅读全文
posted @ 2011-09-25 15:02 BeatLJ 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 动态规划主要适应于求解最优化问题,若分析问题的性质满足如下两点时,就可采用动态规划策略求解:最优子结构--问题的最优解包含子问题的最优解;重叠子问题--求解问题的解时要反复计算若干个子问题,求解子问题可能又要反复求解若干子子问题。(若不满足这一点,可直接用递归)动态规划的实质是分治和避免冗余计算。 阅读全文
posted @ 2011-09-24 19:46 BeatLJ 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 知音之交--伯牙子期; 刎颈之交--廉颇相如; 胶膝之交--陈重雷义; 鸡黍之交--元伯巨卿; 舍命之交--角哀伯桃; 生死之交--刘备、张飞和关羽; 管鲍之交--管仲和鲍叔牙; 忘年之交--孔融和祢衡。 阅读全文
posted @ 2011-09-01 16:04 BeatLJ 阅读(161) 评论(0) 推荐(0) 编辑