为了完成POJ中的一题(spell checker),要写一个最长公共子序列的程序,居然突然全给忘了,楞是没有写出来,深深的鄙视自己一下。
这也是一道动态规划的典型题。
递归实现如下(POJ提交会超时,但是确实可以实现):
下面这个程序用到了动态规划(所谓动态规划就是将一个问题分解成为子问题递归求解,并且将中间结果保存以避免重复计算,关键就是1.找边界,2.找状态转移公式)。此例乃动态规划的典型题。具体实现如下:
#include<iostream> using namespace std; #define MAX 1000 int ndata[ MAX ][ MAX ]; //最长公共子序列 /* 递推公式: if( i == 0 || j == 0 ) maxlen( i, j ) = 0; else if( s1[i] == s2[j]) maxlen( i, j) = maxlen( i - 1, j -1) + 1; else maxlen( i, j) = max( maxlen(i, j - 1 ), maxlen( i - 1, j)); */ int main() { char a[MAX]; char b[MAX]; int i , j; int nTemp; while( scanf("%s%s", a + 1, b + 1) > 0) { int nLength1 = strlen( a + 1 ); int nLength2 = strlen( b + 1 ); for ( i = 0; i <= nLength1; i++) ndata[i][0] = 0; for ( j = 0; j <= nLength2; j++) ndata[0][j] = 0; for( i = 1; i <= nLength1; i++ ) for( j = 1; j <= nLength2; j++ ) { if( a[i] == b[j] ) ndata[i][j] = ndata[i - 1][j - 1] + 1; else { if( ndata[i][j - 1] > ndata[i -1][j]) ndata[i][j] = ndata[i][j - 1]; else ndata[i][j] = ndata[i - 1][j]; } } printf("%d\n", ndata[ nLength1][nLength2]); } return 0; }
您还没有登录,请您登录后再发表评论
LMS Longest Monotonically Increasing Sequence Algorithm
这个问题是关于动态规划(Dynamic Programming, DP)的一个经典实例,被称作“POJ滑雪问题”。在编程竞赛网站POJ(Problem...这种问题解决技巧在处理类似的最优化问题时非常有用,如最长公共子序列、最长递增子序列等。
查看“最长公共子序列”的代码,可以了解动态规划的应用;研究“二分查找”的实现,可以掌握二分法的精髓。此外,这些代码通常会遵循一定的编码规范,有助于提升编程风格和代码质量。 总的来说,这个资源对于想要...
包括最长公共子序列、最优二分检索树等问题,关键在于状态转移方程的设计。 ### 六、数学 #### 组合数学 涵盖加法原理、乘法原理、排列组合等,用于解决计数问题,如poj3252。 #### 数论 涉及素数检测、整除性、...
动态规划则常用于解决背包问题、最长公共子序列等复杂问题;贪心算法常常用于解决最优调度、最小花费等问题;排序算法如快速排序、归并排序等也是常考内容;搜索算法如深度优先搜索、广度优先搜索和A*搜索等在解决...
动态规划适用于那些具有重叠子问题和最优子结构的优化问题,如背包问题、最长公共子序列、斐波那契数列等。 在北大POJ初级阶段,动态规划的题目可能涵盖基础的最短路径问题、最长递增子序列、矩阵链乘法、剪枝操作...
在对齐问题中,可能需要找出两个字符串之间的最长公共子序列或最长公共子串,这是字符串处理中的经典问题。 4. **贪心算法**:另一种可能的解决方案是贪心策略,通过每次做出局部最优选择,期望得到全局最优解。...
动态规划题目通常要求求解最优解,例如背包问题、最长公共子序列等问题。例如,题目poj3267和poj1836就属于动态规划问题,其中poj1836需要通过动态规划找到最优的编辑距离。 ### 5. 数学算法 数学算法涵盖代数、...
6. 1458 Common Subsequence:寻找两个字符串的最长公共子序列,经典动态规划问题。 7. 1953 World Cup Noise:可能需要计算某种状态的最大可能性。 其次,模拟题通常是指通过精确复制问题的逻辑来求解的题目,这类...
在编程竞赛中,动态规划通常被用来解决如背包问题、最长公共子序列、最短路径等问题。 对于POJ 1170的具体问题,由于没有给出详细描述,我们可以进行一般性的动态规划知识讲解。动态规划问题通常分为以下几步: 1....
- "动态规划"常常用于解决背包问题、最长公共子序列等复杂问题。 - "贪心策略"通常用于求解局部最优解的问题,如霍夫曼编码、活动安排等。 - "字符串处理"可能包括模式匹配、字符串操作等。 - "数论"可能涉及到素数...
* 1458 Common Subsequence:本题目使用动态规划来计算两个序列的最长公共子序列。 * 1579 Function Run Fun:本题目使用动态规划来计算函数的执行次数。 * 1887 Testing the CATCHER:本题目使用动态规划来计算测试...
4. **动态规划**:用于解决最优化问题,如背包问题、最长公共子序列、最小编辑距离等,它通过构建状态转移方程来找到最优解。 5. **贪心算法**:对于一些局部最优的选择可以导致全局最优解的问题,如霍夫曼编码、...
在实际应用中,动态规划可以用于解决各种问题,如背包问题、最长公共子序列、最短路径等。在编程竞赛中,动态规划问题是常见的挑战类型,它测试参赛者的逻辑思维能力、问题分解技巧以及高效算法实现。 在提供的文件...
许多POJ题目可以通过动态规划来解决,如背包问题、最长公共子序列、矩阵链乘等。 4. **贪心算法**:贪心算法是一种局部最优策略,通过每一步选择当前最优解,期望最终得到全局最优解。例如,霍夫曼编码、活动安排...
4. **动态规划**:DP是一种强大的工具,能解决许多复杂的问题,如背包问题、最长公共子序列、矩阵链乘法等,通过状态转移方程求解最优解。 5. **回溯算法**:用于解决组合问题和约束满足问题,如八皇后问题、数独...
3. **动态规划**:背包问题、最长公共子序列、最短路径问题等。 4. **递推与回溯**:斐波那契数列、八皇后问题、深度优先搜索等。 5. **字符串处理**:模式匹配、KMP算法、Manacher's Algorithm等。 6. **数学...
1. 动态规划(Dynamic Programming, DP):如背包问题、最长公共子序列、最短路径等。 2. 图论(Graph Theory):包括最小生成树、最短路径算法(Dijkstra、Floyd-Warshall等)、拓扑排序等。 3. 排序与搜索...
3. **动态规划**:解决最优子结构和重叠子问题的策略,如背包问题、最长公共子序列、矩阵链乘法等。 4. **字符串处理**:如KMP算法、Manacher's Algorithm、Z-Algorithm用于查找模式匹配,Rabin-Karp或Boyer-Moore...
3. 动态规划:许多POJ题目可以通过动态规划求解,如背包问题、最长公共子序列、最短路径等。 4. 图论算法:包括Dijkstra算法、Floyd算法、Prim算法等,用于解决图的遍历和最短路径问题。 5. 贪心算法:在每一步选择...
相关推荐
LMS Longest Monotonically Increasing Sequence Algorithm
这个问题是关于动态规划(Dynamic Programming, DP)的一个经典实例,被称作“POJ滑雪问题”。在编程竞赛网站POJ(Problem...这种问题解决技巧在处理类似的最优化问题时非常有用,如最长公共子序列、最长递增子序列等。
查看“最长公共子序列”的代码,可以了解动态规划的应用;研究“二分查找”的实现,可以掌握二分法的精髓。此外,这些代码通常会遵循一定的编码规范,有助于提升编程风格和代码质量。 总的来说,这个资源对于想要...
包括最长公共子序列、最优二分检索树等问题,关键在于状态转移方程的设计。 ### 六、数学 #### 组合数学 涵盖加法原理、乘法原理、排列组合等,用于解决计数问题,如poj3252。 #### 数论 涉及素数检测、整除性、...
动态规划则常用于解决背包问题、最长公共子序列等复杂问题;贪心算法常常用于解决最优调度、最小花费等问题;排序算法如快速排序、归并排序等也是常考内容;搜索算法如深度优先搜索、广度优先搜索和A*搜索等在解决...
动态规划适用于那些具有重叠子问题和最优子结构的优化问题,如背包问题、最长公共子序列、斐波那契数列等。 在北大POJ初级阶段,动态规划的题目可能涵盖基础的最短路径问题、最长递增子序列、矩阵链乘法、剪枝操作...
在对齐问题中,可能需要找出两个字符串之间的最长公共子序列或最长公共子串,这是字符串处理中的经典问题。 4. **贪心算法**:另一种可能的解决方案是贪心策略,通过每次做出局部最优选择,期望得到全局最优解。...
动态规划题目通常要求求解最优解,例如背包问题、最长公共子序列等问题。例如,题目poj3267和poj1836就属于动态规划问题,其中poj1836需要通过动态规划找到最优的编辑距离。 ### 5. 数学算法 数学算法涵盖代数、...
6. 1458 Common Subsequence:寻找两个字符串的最长公共子序列,经典动态规划问题。 7. 1953 World Cup Noise:可能需要计算某种状态的最大可能性。 其次,模拟题通常是指通过精确复制问题的逻辑来求解的题目,这类...
在编程竞赛中,动态规划通常被用来解决如背包问题、最长公共子序列、最短路径等问题。 对于POJ 1170的具体问题,由于没有给出详细描述,我们可以进行一般性的动态规划知识讲解。动态规划问题通常分为以下几步: 1....
- "动态规划"常常用于解决背包问题、最长公共子序列等复杂问题。 - "贪心策略"通常用于求解局部最优解的问题,如霍夫曼编码、活动安排等。 - "字符串处理"可能包括模式匹配、字符串操作等。 - "数论"可能涉及到素数...
* 1458 Common Subsequence:本题目使用动态规划来计算两个序列的最长公共子序列。 * 1579 Function Run Fun:本题目使用动态规划来计算函数的执行次数。 * 1887 Testing the CATCHER:本题目使用动态规划来计算测试...
4. **动态规划**:用于解决最优化问题,如背包问题、最长公共子序列、最小编辑距离等,它通过构建状态转移方程来找到最优解。 5. **贪心算法**:对于一些局部最优的选择可以导致全局最优解的问题,如霍夫曼编码、...
在实际应用中,动态规划可以用于解决各种问题,如背包问题、最长公共子序列、最短路径等。在编程竞赛中,动态规划问题是常见的挑战类型,它测试参赛者的逻辑思维能力、问题分解技巧以及高效算法实现。 在提供的文件...
许多POJ题目可以通过动态规划来解决,如背包问题、最长公共子序列、矩阵链乘等。 4. **贪心算法**:贪心算法是一种局部最优策略,通过每一步选择当前最优解,期望最终得到全局最优解。例如,霍夫曼编码、活动安排...
4. **动态规划**:DP是一种强大的工具,能解决许多复杂的问题,如背包问题、最长公共子序列、矩阵链乘法等,通过状态转移方程求解最优解。 5. **回溯算法**:用于解决组合问题和约束满足问题,如八皇后问题、数独...
3. **动态规划**:背包问题、最长公共子序列、最短路径问题等。 4. **递推与回溯**:斐波那契数列、八皇后问题、深度优先搜索等。 5. **字符串处理**:模式匹配、KMP算法、Manacher's Algorithm等。 6. **数学...
1. 动态规划(Dynamic Programming, DP):如背包问题、最长公共子序列、最短路径等。 2. 图论(Graph Theory):包括最小生成树、最短路径算法(Dijkstra、Floyd-Warshall等)、拓扑排序等。 3. 排序与搜索...
3. **动态规划**:解决最优子结构和重叠子问题的策略,如背包问题、最长公共子序列、矩阵链乘法等。 4. **字符串处理**:如KMP算法、Manacher's Algorithm、Z-Algorithm用于查找模式匹配,Rabin-Karp或Boyer-Moore...
3. 动态规划:许多POJ题目可以通过动态规划求解,如背包问题、最长公共子序列、最短路径等。 4. 图论算法:包括Dijkstra算法、Floyd算法、Prim算法等,用于解决图的遍历和最短路径问题。 5. 贪心算法:在每一步选择...