POJ3356解题报告(最小编辑距离)

摘要: 给定两个字符串x,y,求得相互之间转换的最小操作次数(最小编辑距离)。dp[i][j]表示x的前i个字符和y的前j个字符的最小编辑距离,与以下三个值有关: dp[i-1][j] dp[i - 1][j - 1] dp[i][j - 1]对于第一个,要求的dp[i][j],要做的是比较x[i]和空(可能是insertion或者deletion,不关注),操作代价为1。对于dp[i][j - 1]同样... 阅读全文
posted @ 2012-02-02 11:33 见路非道 阅读(189) 评论(0) 推荐(0)

HDU1003解题报告

摘要: 给定一串数字,要求子序列和最大的值。这个子序列是连续的。要不然,就直接选取全是正值的加和即可。我开始很直接的就想到一个O(n^2)的算法,因为子序列又开始位置i和结束位置j。我就定义了一个二维数组,索引就是位置,例如,a[i][j]表示,子序列i到j的和,然后遍历一边二维数组,得到最大的值。代码如下:#include using namespace std;int main() { int ... 阅读全文
posted @ 2012-02-01 23:47 见路非道 阅读(146) 评论(0) 推荐(0)

POJ2192解题报告

摘要: 这道题目比较有意思,给定三个字符串,判断第三个字符串是不是前两个字符串中的字符组成的,而且,在前两个字符串中的字符要与原串中的顺序一致才行。例如,cat tree cattree就可以,但是tretac就不行了。解决这个我首先想到的是使用递归的方法解决:用三个变量记录三个字符串的扫描位置,初始都是0,然后递归遍历每个字符,判断是否于第三串中相等,相等则游移一位。代码如下:#include #inc... 阅读全文
posted @ 2012-02-01 23:28 见路非道 阅读(147) 评论(0) 推荐(0)

POJ1080解题报告

摘要: 依旧是如何找到递归表达形式。这个我目前也没有更好的方法,只能遇到一道题目,就解决一道,想不到就抄别人的,变成自己的,积累经验。这道题目中提到的对齐方法,可以任意的加空格,用‘-’表示。那这个情况就比较多了,要怎么处理呢。总结递归表达形式如下,对于任意第一个前i个字符和第二个前j个字符匹配的最大匹配值dp[i][j]可取一下三个之中最大:a[i]第一个字符串的前i个字符,b[i]第二个字符串的前j个... 阅读全文
posted @ 2012-02-01 17:24 见路非道 阅读(154) 评论(0) 推荐(0)

POJ1159解题报告

摘要: 将一个问题的解决过程,表达为递归的形式,还是挺难的,有的问题递归藏的很深。有的问题本身进行递归,有的却要转换一下,这个是很重要的。POJ1159题,对于一个给定的字符串最少插入几个字符,可以变成一个回文字符串。这道题目,刚刚看,觉得无从下手,因为事先知道使用动态规划解决,要找到解的递归形式,怎么也没想明白(其实是可以的)。后来变换思路,逆向思维,因为要插入一些字符,才能变为回文,那去掉插入的这些字... 阅读全文
posted @ 2012-02-01 14:53 见路非道 阅读(150) 评论(0) 推荐(0)

Java语言七年之痒

摘要: 我以前一直坚信:语言不是问题,算法与数据结构才是关键!所以,从我刷acm的题目开始,我一直用的是java,因为java我真的是太熟练了。不想浪费时间的语言语法的层面,只想专心算法和数据结构。但是看着程序的运行结果,我动摇了。七年了,我开始动摇了。很多题目,java写出来的,同样的算法,需要几百ms,而c++不到0ms。差距如此之大,我不得不也练练c++了。其实c++之前也学过,基本语法儿也没问题,... 阅读全文
posted @ 2012-01-31 16:20 见路非道 阅读(227) 评论(0) 推荐(0)

最长公共子序列问题的动态规划解法

摘要: 就我目前学习动态规划的程度,我觉得使用动态规划的方法解决一个问题,最难的是:将问题的解决过程用递归的形式表达出来。使用递归的形式表达出来之后,可以判断是否有重叠的子问题,或者我们在构造递归表达形式的过程中,就会进行判断。另外,可以根据递归的参数,设计数组存储计算的结果,也就是有些博客中提到的填表过程。有很多时候,觉得动态规划解法的代码中,数组运用到很是巧妙,这个主要还是来自递归形式中。 在上一篇的博客中,递归形式其实比较明显。在这一篇,我尝试分析最长公共子序列问题的动态规划解法儿,加深递归表达式产生的过程,也就是自顶向下的分析过程。 最长公共子序列问题:一个数列 S,如果分别是两个或多个已知数 阅读全文
posted @ 2012-01-30 09:10 见路非道 阅读(351) 评论(0) 推荐(0)

动态规划入门

摘要: 一种学习编程的方法:抄别人的思路,抄别人的代码,然后,变成自己的。我在微博上看不少牛人都用过这样的方法,我以前也用,只不过没说。哈哈,这种方法适合比较难的算法。而,动态规划对我来说,就是比较难的了。算法,我觉得自己上道儿没多久。一直听说动态规划是一种很牛的算法,确切的说是一种方法。我对它一直都是望而却步,一方面没有实际需求,另一方面总觉得自己学不会。这不要练内功,就硬着头皮开始,并且使出我上面的招... 阅读全文
posted @ 2012-01-29 17:32 见路非道 阅读(346) 评论(0) 推荐(0)

学习的方法

摘要: 写在前面:博客这东西,有时间就多写写,没时间就少写写。而且,我发现,博客一定要写的,这和学习方法有关。以前没有自己的电脑的时候,学习都是听记笔记,然后课下看笔记复习,效果挺好的,至少我大学的时候,每年都是我们班前几名,而且很多时候是第一。我不是特别聪明的人,那个时候就坚信: 好记性不如烂笔头 不动笔墨不读书这些都是我爸爸传授给我的。我那个时候实践过了,但是上了研究生之后,好想就荒废了。除了上课依然... 阅读全文
posted @ 2012-01-28 08:57 见路非道 阅读(174) 评论(0) 推荐(0)

编程语言对我的思维的影响

摘要: 今天看到一句话,深有感触:A language that doesn't affect the way you think about programming, is not worth knowing." -Alan Perlis大概的意思就是说,不能够影响你的思维的编程语言,是不值得学习的。以前,我对这个,理解得并不是很深刻:语言就是一个工具而已,还是要靠我的思维去指导。起决定性作用的,还是我... 阅读全文
posted @ 2012-01-27 23:27 见路非道 阅读(561) 评论(0) 推荐(0)