写个关于lcs模板的问题
2016-04-28 09:15
225 查看
for( int i = 1; i <= len1; ++i )
{
for( int j = 1; j <= len2; ++j )
{
if( s1[i] == s2[j] )
{
dp[i][j] = dp[i-1][j-1] + 1;
}
else
{
dp[i][j] = Max ( dp[i-1][j], dp[i][j-1] ); 、、关于这个模板 看了好久 想整理 一下思路 方便以后用
}
}
最大子序列的问题
这个模板 把所有初值 都赋值为0 从第一个开始找到第一个与他相等的位置 (为了这个模拟运行了好多次) 如果不相等 就每次留下 他前面最大相同的子序列
比如 1 3 3 2 4
2 1 3 4 1
这个 模拟运行一下 从1 开始 上来 1!=2 所以 dp【1】【1】的值应该保留为 dp【i-1】【j】 dp【i】【j-1】的最大值 都是0 这可能看不出来
下面 继续模拟
当一等于 一的时候 dp【1】【2】 等于dp【0】【1】+1 这样子是用上面的最大子序列长度 加上他的;
继续 当1!=3的时候 这个时候 dp【1】【3】 需要保留dp【1】【2】的值 或者dp【0】【3】的值很明显dp【1】【2】才是判断到这里的最大值;
一直到 dp【1】【4】都是保留的 dp【1】【2】的值
目前 dp【1】【】值分别为 0 1 1 1 1 ;
在进行下一个
dp【2】【1】 值为0 以为dp【1】【1】 dp【2】【0】为0;
一直到dp 【2】【3】 保留的是dp【1】【2】加1
在这之前dp【2】【2】一直保留了之前的最大长度
一直循环到最后 保留的肯定是最大值
我很看好
在出现相同子串的时候 会将不同值给分开 。
相出这个dp 的一定 很 66 ;
{
for( int j = 1; j <= len2; ++j )
{
if( s1[i] == s2[j] )
{
dp[i][j] = dp[i-1][j-1] + 1;
}
else
{
dp[i][j] = Max ( dp[i-1][j], dp[i][j-1] ); 、、关于这个模板 看了好久 想整理 一下思路 方便以后用
}
}
最大子序列的问题
这个模板 把所有初值 都赋值为0 从第一个开始找到第一个与他相等的位置 (为了这个模拟运行了好多次) 如果不相等 就每次留下 他前面最大相同的子序列
比如 1 3 3 2 4
2 1 3 4 1
这个 模拟运行一下 从1 开始 上来 1!=2 所以 dp【1】【1】的值应该保留为 dp【i-1】【j】 dp【i】【j-1】的最大值 都是0 这可能看不出来
下面 继续模拟
当一等于 一的时候 dp【1】【2】 等于dp【0】【1】+1 这样子是用上面的最大子序列长度 加上他的;
继续 当1!=3的时候 这个时候 dp【1】【3】 需要保留dp【1】【2】的值 或者dp【0】【3】的值很明显dp【1】【2】才是判断到这里的最大值;
一直到 dp【1】【4】都是保留的 dp【1】【2】的值
目前 dp【1】【】值分别为 0 1 1 1 1 ;
在进行下一个
dp【2】【1】 值为0 以为dp【1】【1】 dp【2】【0】为0;
一直到dp 【2】【3】 保留的是dp【1】【2】加1
在这之前dp【2】【2】一直保留了之前的最大长度
一直循环到最后 保留的肯定是最大值
我很看好
在出现相同子串的时候 会将不同值给分开 。
相出这个dp 的一定 很 66 ;
相关文章推荐
- 第八周项目2-数组作数据成员(2)
- 交叉编译 环境 流程
- Pod 更新出现pod.lock的问题
- redis入门——redis常用命令
- for循环退出方法,带冒号:的退出等
- 获得设备的宽和高
- python, linux shell 使用expect模块自动输入密码
- C#一颗简单多叉树的实现(原理、广度优先遍历、深度优先遍历)
- 所有php版本
- 第九周项目三人数不定的工资类
- 理解ASP.NET MVC的DependencyResolver组件
- Django前端实现列表分页显示
- C#中is和as两种关系运算符
- location.hash保存页面状态的技巧
- JavaScript中字符串的常用操作汇总
- abap的select语句结果集对多个字段排序
- Python3学习(一)-基础、数据类型、变量、字符串和编码、list&tuple、if、for、while、dict、set、函数与参数
- 双目测距
- 向量几何
- Objective-C中字符串NSString的常用操作方法总结