日志-算法学习
jack_incredible
这个作者很懒,什么都没留下…
展开
-
我决定从今天开始进行魔鬼式的算法学习与训练
我决定从今天开始进行魔鬼式的算法学习与训练。 以前经常十天打鱼,九天晒网。最致命的问题是:每次思考问题的过程中发现脑袋不够用的时候,或者每次CODING的过程中发现原来想法的漏洞的时候,每次CODING过程中遇到新问题的时候,都会主动举手投降,选择放弃。 归根结底,自己的毅力不够,而且不懂得吃苦,当然基础不扎实也是其中一个原因。 一方面,现在一定要咬牙忍痛祛除这个遇到难题就举手投原创 2011-10-21 21:45:26 · 949 阅读 · 1 评论 -
2011.11.12 POJ3126解题报告
一、做题状况:正在复习BFS。二、思路分析:先计算出所有4位数的素数,存入vector,初始化每一个点到出发点的距离为-1,出发点到自己的距离为0.然后就是BFS了。三、题目类型:BFS四、进步这道题目自己犯了一个很傻X的错误,在判断一个数是否是素数的时候:刚开始是这么写的: int up = sqrt((double) I); for(int i=2; i<up; ++i原创 2011-11-12 14:49:00 · 423 阅读 · 0 评论 -
2011.11.10 poj1062,poj2253,poj1125 单源最短路径 解题报告
今天是那么多天来,甚至从做OJ以来,状态最好的一天,AC了3道题目,都是利用“业余”时间AC的,而且其中有两道(1062和1125)是一次性AC。3个题目都是有关最短路径的,前2个是单源最短路径,1125是每对顶点间的最短路径,不过1125我也是用Dijkstra做的,然后循环执行了n遍Dijkstra,从AC结果来看,时间还不错,主要是输入规模小才100。 等看完算导原创 2011-11-10 21:42:39 · 484 阅读 · 0 评论 -
2011.11.12 POJ1426 一道引我深思的问题
一、做题状况:正在复习BFS和DFS。二、思路分析:自己想了方法,逐位计算,但是发现最后有的过程中会有多条路可选择,感觉回溯很麻烦,所以没有用回溯,导致有的输入数据直接进入死胡同,因为会遇到类似“死胡同”的地方。查了下网上他人的思路,觉得别人好聪明啊,利用DFS,最关键的是可以利用DFS暴力搜索一遍所有可能的结果,注意要利用unsigned long long类型,它可以计算到2.^6原创 2011-11-12 22:16:11 · 710 阅读 · 0 评论 -
2011.12月初 背包问题专辑POJ 3624 1276 2392 1837
这几天在着力解决背包。这个月1号和2号看了背包九讲前几章,感触很深,感觉9月份看的东西有的忘记了,有的还存留着一些记忆。不过这次是打印出来看了,看纸质版的资料果然自己更加认真。进入正题吧:3624:01背包,最简单的1276:多重背包,这道题非常坑人,我试了好多次,觉得自己的数据对了,但是提交上去总是WA,直到第二天都是这样,我改了又改,几乎检查了所有可能出错的地方,为了防止范围不原创 2011-12-07 21:18:31 · 437 阅读 · 0 评论 -
2011.12.16 DP poj3356 1887 2533 1631 1157 1088 【历史以来,AC题目最多的一天】
最近DP有一些收获,今天AC状态不错,一天AC了6道题目。是历史以来,AC题目最多的一天。小结一下这几天DP的收获:掌握了以下几类经典题目:1.最长公共字串 (复杂度O(n.^3)),lrj的资料上描述有O(n.^2)的算法,我晚上初看了一下,没看懂。周末仔细揣摩一下吧。2.最长单调递增子序列: 方法一:复杂度O(n.^2) 方法二:复杂度O(nlogn) 其中要用到二分原创 2011-12-16 23:08:08 · 393 阅读 · 0 评论 -
为什么觉得有点累了?
为什么觉得有点累了? 真的有点DP不动了的感觉,其实主要还是太多题目不会,经常受挫折,打击了前进的信心。我想做不死的小强。。。。。。原创 2011-12-19 21:53:52 · 444 阅读 · 0 评论 -
2011.12.22 poj1029 暴力枚举【learn from others】
从POJ-DP集合问题里按顺序做到这道题,结果发现这道题本质不是DP问题(当然,也有牛人能用DP解答,显然我不是牛人)。自己上午做了一个上午,写了好多遍,WA了,然后自己自我思考找出了好几个极端例子,包括DISCUSS里面的两个极端例子,吃午饭前想出两个极端例子,以及午饭后回实验室的路上也在想,在进门前上楼梯的时候想到一个反例,都改正过来了,最后提交仍旧WA了,心灰意冷。这道题就WA6次,遇到原创 2011-12-22 15:35:41 · 710 阅读 · 0 评论 -
2011.12.22 poj1170 DP
一、做题状况: 最近一直研习DP,虽然遇到过很多挫折,但是觉得自己还是已经开始慢慢进入角色。本题略微参考了他人解题报告一丁点,几乎所有实际代码和思路由自己完成。二、思路分析: DP记忆化搜索,如果可以利用special offer,那么考虑利用它,然后求取剩余的值(用记忆化搜索的方法)。如果无任何special offer可用,那么直接全部按最初的价格计算。 一次性AC。三原创 2011-12-22 20:37:42 · 352 阅读 · 0 评论 -
2011.12.25 POJ1036 DP
思路分析: 首先以进入的时间为key,对gangsters进行排序。 接下来,类似最大连续和一样,定义f[i] 为以i最后一个gangster进入restaurant时,所能得到的最大的分数。 那么推理出状态转移方程为: f[i] = max{ f[j] + p[i] } 其中j= abs(s[j]-s[i]) 2AC。题目类型:DP四、进步1.通过这道题,自原创 2011-12-25 11:02:25 · 336 阅读 · 0 评论 -
2011.12.26 POJ1240
题目大意:一直一颗M叉树的先序遍历和后序遍历,求中序遍历的种数。(by the way,如果已知先序和中序,那么后序唯一,如果已知中序和后序,先序也是唯一的)题目的关键在于“分治”的思想来DP,求得每个结点有多少个子节点,先把每个子节点的可能种数求出来,然后相乘,然后再乘以C(m,n),其中n为当前结点的子节点数目,所得到的结果就是以当前结点为根的中序遍历的种数。 顺便说一句,求C(m,n)的原创 2011-12-26 18:21:17 · 548 阅读 · 0 评论 -
2011.12.26 POJ1293 转化为01背包来做
这个题目自己做得比较满意,至少从思路上来说,非常满意。因为我完全独立思考地把它转化成了一道01背包问题。不过在做的过程当中也遇到了一个问题。就是01背包选择后,输出方案的时候发现以前一直以为是正确的方法,现在终于发现有漏洞了。把问题抽象出一个简单一点的模型吧:一个背包,背包的能承受的重量为上限为V;有N个物品,物品的重量分别为v1,v2...vN.求最大可能地装满背原创 2011-12-26 20:58:02 · 612 阅读 · 0 评论 -
11月份 算法学习 小结
本月前段时间表现还不错,掌握了一些基本的算法,月末的5天三国杀去了。 从今天开始结束吧。。。明天就12月份了。总结下:11月份掌握的算法主要涉及:1.图算法:1)图的遍历:BFS,DFS,拓扑排序。其中BFS,DFS都掌握的相对较好了,拓扑排序掌握得相对不是很熟练。POJ上一道拓扑排序题还没有做出来,当时也没找到简单的拓扑排序题。2)最小生成树 :掌握3)单源最短路径:原创 2011-11-30 23:14:41 · 1050 阅读 · 0 评论 -
2012.1.2 poj2346 自己独立想出状态转移方程的DP题目
题意:给定一个数N(偶数),在所有N位数构成的整数中,左半部分N/2位数字之和和右半部分N/2位数字之和相等的种数有多少个?例如N=2时,只有00 11 22 33 ......99共10种情况。 N=4时,有670种情况。现给定整数N(偶数),且N我的想法,设 f[i][j]为 左半部分有i位,右半部分有i位(即总共2*i)位的情况下,左半部分之和减去右半部分之和为j的种原创 2012-01-02 19:07:02 · 580 阅读 · 0 评论 -
【POJ第100题小里程碑】2012.1.2 poj2353 DP
其实自己的DP能力还很有限,只是今晚状态比较好而已。这道DP题的AC率为31%,我3A。定义f(i,j)为第i个floor第j个房间为终点的最小费用。则f(i,j) = min( f(i-1,j) f(i,j-1) f(i,j+1) ) + cost[i][j];其中f(i,j)要relax计算很多次(最多N次,N为此楼房间数目),以为relax后可以更新得到最小值。这招是在11月原创 2012-01-02 20:45:54 · 515 阅读 · 0 评论 -
2011.11.25 poj2965 poj1713 poj3295 解题报告【用DFS来枚举】
今天最大的收获是:提升了自己“用DFS来枚举”的能力。一、做题状况:一直在温习DFS二、思路分析:今天AC了3道题,说实话,受益匪浅,这3道题都比较经典。尤其是前两道题,经典的可以用DFS做。做第一题之前,依然没有想到用DFS来枚举,看了一下别人的博客,别人一句话就提醒到了我,“总共有2.^(4*4) = 2.^(16)种情况”,然后我马上想得到了用DFS来枚举这2.^16原创 2011-11-25 23:47:05 · 791 阅读 · 0 评论 -
2011.11.3 poj1860 Currency Exchange 单源最短路径 Bellman-Ford算法 解题报告
一、做题状况:其实看完题后,题目都没懂,看了别人的解释才懂题意,但是也始终没想到可以用最短路径的算法来做。 二、思路分析:这道题的意思其实还是:能不能通过各个exchange point换钱币来使自己的钱增值。 就是相当要确定是否存在一个正环。 而Bellman-Ford算法里面专门考虑了负环是否存在的问题,算法里考察负环是否存在的思路恰好和这道题需要的考虑是否存在一个正环相当原创 2011-11-03 20:47:48 · 485 阅读 · 0 评论 -
2011.10.21算法学习日志-生成元素的全排列
思维起源于LRJ的那本算法竞赛入门书籍7.2.1生成1~n的全排列,而且最近在BYR论坛上也频繁看到众兄弟们去面试的时候别问起有关全排列的问题。说明:一下所有全排列输出都按照字典序排列顺序输出。1.先描述最简单的全排列算法思想吧。我们尝试用递归的思想解决:先输出最小的数(这一步是递归调用),然后输出第2小的数(又是递归调用),接着输出。。。最后是输出最大的数(这一步又是递归原创 2011-10-21 22:07:59 · 579 阅读 · 0 评论 -
2011.10.22 poj1664放苹果 解题报告
放苹果Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 18762 Accepted: 11905Description把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。原创 2011-10-22 22:05:06 · 933 阅读 · 0 评论 -
2011.10.23 poj1423Big Number 伪解题报告
做了一道巨水,巨坑人的题!首先自己按照LRJ上的那道超大数阶乘把n!算出来了,存在字符串里,然后输出有效位长度,结果毫无疑问TLE!然后读了一个博客,找到一个公式:n!=n*(n-1)*(n-2)*…..*1 n的位数=[lg(n)]+1;所以:n!的位数=[lg(n*(n-1)*(n-2)*…..*1)]+1=[lgn+lg(n-1)+lg[n-2]+原创 2011-10-23 22:34:03 · 335 阅读 · 0 评论 -
【八皇后问题】递归算法学习系列之八皇后问题
http://www.cnblogs.com/jillzhang/archive/2007/10/21/922830.htmlhttp://www.cnblogs.com/drizzlecrj/archive/2007/10/04/913703.html1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这转载 2011-11-14 20:55:29 · 989 阅读 · 0 评论 -
2011.11.13 poj2251 如果要用到BFS或者DFS,如果最短路径的相关问题,那么肯定是BFS!!!不会是DFS!!!
被题目归类骗了,题目归类认为这道题是DFS题目。我DFS写完后,提交WA,仔细看了,要求最短路径,我突然看到“最短”,我去!肯定是BFS了,被《题目归类》骗了。下午和高中同学聚会去了,晚上三国杀了,十点半回实验室,感冒了,吃了药,写了会儿BFS代码。11点 回宿舍测试一下,提交,AC。进步: 记住:如果要用到BFS或者DFS,如果最短路径的相关问题,那么原创 2011-11-13 23:45:14 · 570 阅读 · 0 评论 -
2011.11.17 poj2488 dfs+回溯法
一、做题状况:最近两天比较忙,高中好朋友来北京了,几个在北京的老同学一起聚会了,大家一起出去疯狂的吃喝玩乐,空余时间全没了。所以最近两天都没有怎么练。二、思路分析:dfs+traceback(回溯法)三、题目类型:dfs+traceback(回溯法)四、进步本题提交若干遍才ac,原因:1.忘记每轮测试之前对vis[]数组初始化了,导致后续轮的vis用到了前面测试样例用过的vis原创 2011-11-17 10:10:01 · 457 阅读 · 0 评论 -
2011.11.17 POJ3009 dfs+回溯
一、做题状况:一直在温习DFS二、思路分析:刚开始看到要求“最短方案“,自然而然想到前几天那个题目,” 2011.11.13 poj2251 ”当时的感想是:最短路径肯定用BFS,于是决定写BFS,写到半路,发现不对劲。因为BFS,必须要有一个优先队列来存放已访问过但是还未访问完的节点,而每一个矩阵状态是要单独存放的,因为每一次visit都会改变矩阵的状态。最后原创 2011-11-17 13:17:27 · 505 阅读 · 0 评论 -
2011.10.28 poj2421 Constructing Roads 解题报告
今晚写算法的时候,俺的手指各种犯贱,各种敲错。泪奔啊~~~题目不贴了,自己看吧。http://poj.org/problem?id=2421MST(最小生成树)水题一道,我却做了好久。待会分析原因(第四部分)。一、做题状况: 前几天看了算导MST的那一章(其实,大概半年前就看了些,当时觉得贪心算法没掌握好,所以只看了一半,想掌握好贪心后再回来看,现在觉得很多时候前面的坎原创 2011-10-29 22:06:11 · 576 阅读 · 0 评论 -
最大流的一个非常好写的算法。。
http://hi.baidu.com/wjbzbmr/blog/item/ed1963d1e5ff4ed3a8ec9ac7.html以前最大流我都是写sap啊。dinic啊之类的复杂算法。。感觉很不爽。。但是暴力dfs又经常超时,而EK算法反而更难写。。于是我很纠结。。今天我看到了一种很帅的算法。。就是每次只增广容量在K以上的增广路,找不到了将k除2。。代码很简单,时间我测了转载 2011-11-19 11:29:06 · 1145 阅读 · 0 评论 -
初谈网络流(最大流)..Edmonds_Karp..Dinic
http://blog.csdn.net/kk303/article/details/6707605转载 2011-11-19 11:30:19 · 331 阅读 · 0 评论 -
2011.11.2 poj1258 Agri-Net 解题报告
一、做题状况: 昨晚做题状态不错,今天早上乘势又做了一道MST,不过这次要求用两种方法Kruscal和Prim。前者为了提高速度,用到并查集,后者用到最小优先队列。二、思路分析: 经典的MST,纯属练习MST而已。三、题目类型:MST(最小生成树)四、进步 Kruscal算法,Prim算法。并查集,最小优先队列的使用。原创 2011-11-02 10:09:29 · 324 阅读 · 0 评论 -
2011.11.1 poj1789 Truck History 解题报告
一、做题状况: 一直不会并查集,导致一直TLE,包括前两天晚上做的POJ2485也一直LTE,今晚在从实验室回宿舍的路上终于想通了并查集原理,主要是在最小生成树上应用的原理。:)二、思路分析: 经典的MST,纯属练习MST而已。所以思路没什么好分析的,唯一需要注意的是:审题要有速度,快速独立读懂题意。三、题目类型:MST(最小生成树)四、进步 最大的进步:最小生成树中并查原创 2011-11-01 23:49:41 · 537 阅读 · 0 评论 -
2011.11.1 poj2485 Highways 解题报告
同上一篇:2011.11.1 poj1789 Truck History 解题报告原创 2011-11-01 23:50:45 · 358 阅读 · 0 评论 -
2011.11.23 POJ2531解题报告【谨以此文,纪念自己跨过POJ50道题的小里程碑】
一,做题状况:这几天一直处于低谷状态,是因为50题的小坎来了么?呵呵做题目都没什么思路,看完别人的解题报告后,豁然开朗,哦,明白了,想起来了。。。归根结底,自己学的不牢固啊,例如这几天的DFS,很多时候看完题才知道,原来这道题目可以用DFS啊。刚开始看题的时候,根本想不到用DFS,就算想到了DFS,也不知道怎么用,总觉得有点模糊不清,还是基础不牢靠吧。这道题,知道用DFS后,想到用原创 2011-11-23 21:08:14 · 670 阅读 · 0 评论 -
POJ1018 DP 一道自己独立思考出的DP题目 兼 12月份算法学习小结[更新]
DP题:定义dp_b[i][j]为考虑第i种物品时,选择第j个物品,这样的方案时,有效带宽。 dp_p[i][j]为考虑第i种物品时,选择第j个物品,这样的方案时,价格总和。 则状态转移方程: dp_b[i][j] = max{ min{ dp_b[i-1][k],band[i][j] } /原创 2011-12-27 11:20:22 · 1474 阅读 · 4 评论