
算法
文章平均质量分 68
从未被模仿一直被超越
这个作者很懒,什么都没留下…
展开
-
最大子段和问题(Maximum Interval Sum)
一、问题描述 给定长度为n的整数序列a[1...n](可能有负数),找出其中连续的子段,使它们的和达到最大。例如 [-2,11,-4,13,-5,2] 的最大子段和为20,所在子区间为[2,4]. 二、解题思路 可以转化为动态规划问题,记s[i]为 a[0]到a[i]中包含a[i](即以a[i]为结尾)的最大子段和,则s[i]如何用s[i-1]来表示? s[i] = s[i-1] +原创 2013-05-03 20:29:46 · 726 阅读 · 0 评论 -
最长公共子序列(LCS, Longest Common Subsequence), POJ 1458
一、问题描述 求两个字符串的最长公共子串,经典的动态规划问题。算法导论中有详细的讲解。 二、解题思路 如若两个字符串分别为:X=abcfbc和Y=abfcab。创建一个二维数组c[][],维数分别是两个字符串的长度加一。定义c[i][j]表示Xi和Yj的最长公共子串(LCS).当i或j等于0时,c[i][j]=0. LCS问题的最优子结构存在以下递归式: c[i][j] = 0原创 2013-05-04 16:05:45 · 1147 阅读 · 0 评论 -
输出从矩阵左上角到右下角的所有路径
一、问题描述 一个m×n的矩阵,只能从矩阵内部向右或向下走,输出从矩阵左上角到右下角的所有路径。 下图即为从1到6的所有路径 1 2 3 4 5 6 二、解题思路 1、数学解法求路径数 (1)使用排列组合。因为只能向右走或者向下走,在(m-1)+(n-1)次行走后,才能到达终点,也就是右下角。而在这m+n-2次行走中,有m-1次原创 2013-05-03 22:18:16 · 5451 阅读 · 1 评论 -
求数组中和为给定值的所有组合 (POJ 1564)
一、问题描述 给定一个数t,以及n个整数,在这n个数中找到相加和为t的所有组合,例如t=4,n=6,这6个数为[4,3,2,2,1,1],这样输出就有4个不同的组合相加为4: 4,3+1,2+2,and 2+1+1。 二、解题思路 先将数据按从大到小进行排序(POJ 1564已排序),然后使用回溯法遍历所有可能。注意去掉重复的结果。 三、代码实现 #include int ok;//是原创 2013-05-03 19:21:15 · 4537 阅读 · 0 评论 -
欧拉图
昨天做题用到了欧拉图,本来刚看到这个名词我是不知道什么是欧拉图的,wiki了一下发现原来欧拉图就是小学奥数做腻了的"一笔画"问题... 图论起源于18世纪,1736年瑞士数学家欧拉(Eular)发表了图论的第一篇论文:哥尼斯堡七桥问题"。 在当时的哥尼斯堡城有一条横贯全市的普雷格尔河,河中的两个岛与两岸用七座桥联结起来,见图(1)。当时那里的居民热衷于一个难题:游人怎样不重转载 2013-05-08 17:00:20 · 944 阅读 · 0 评论 -
最长递增子序列 (Longest Increasing Subsequence, LIS),POJ 2533, POJ 1631
一、问题描述 设L=1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列S=k1,ak2,…,akm>,其中k1k2km且ak1k2km。求最大的m值。比如序列(1, 7, 3, 5, 9, 4, 8)的递增子序列包括(1, 7), (3, 4, 8)等等,最长递增子序列为(1, 3, 5, 8),长度为4。 二、解题思路 (1) 把a1,a2,...,an排序,假原创 2013-05-06 20:08:39 · 573 阅读 · 0 评论