动态规划之——最长公共子序列(nyoj36)
问题描述:
最长公共子序列
- 描述
-
咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。- 输入
-
第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000. - 输出
- 每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
- 样例输入
-
2 asdf adfsd 123abc abc123abc
- 样例输出
-
3 6
分析:此题两个字符串求最长公共子序列,两个字符串我们就自然的想到用二维数组来记忆每个阶段的结果。
动态方程为:if(a[i]==b[j]) dp[i][j] = dp[i-1][j-1]+1;
else dp[i][j] = dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];
如图:
源程序:
#include <stdio.h>
#include <string.h>
int dp[1005][1005]={0};
int main()
{int t;scanf("%d", &t);while(t--){getchar();char a[1005]={0},b[1005]={0};scanf("%s%s", a+1,b+1);int la = strlen(a+1);int lb = strlen(b+1);for(int i=1; i<=la; i++){for(int j=1; j<=lb; j++)if(a[i]==b[j]) dp[i][j] = dp[i-1][j-1]+1;else dp[i][j] = dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];}printf("%d\n", dp[la][lb]);}return 0;
}
动态规划之——最长公共子序列(nyoj36)相关推荐
- 动态规划解决最长公共子序列
动态规划解决最长公共子序列 问题描述 给定两个序列,例如 X = "ABCBDAB".Y = "BDCABA",求它们的最长公共子序列的长度. 递归关系 c[i ...
- 动态规划解最长公共子序列(LCS)(附详细填表过程)
目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...
- javascript写算法(一) 动态规划:最长公共子序列
csdn是疯了吗,右下角的广告是一个人站在猪屁股后面打它...看了一下居然是baidu算出来的广告嵌在了iframe里,fixed to viewport,真是够了.最近还频频出现的广告是一个光头男子 ...
- 【动态规划】最长公共子序列与最长公共子串
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 动态规划解决方案最长公共子序列问题(开启)
动态规划 常常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地採用把大问题分解成子问题.并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数添加. 为 ...
- 动态规划之----最长公共子序列
动态规划算法的基本要素: 1)最优子结构 当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质.问题的最优子结构性质提供了该问题可用动态规划算法求解的最重要线索. 在动态规划算法中,利用 ...
- 两个字符串的最长公共子序列长度_【面试】动态规划-之最长公共子序列、最长公共子串问题...
先来说明下什么是最长公共子序列,什么是是最长公共子串,举一个实际例子,myblogs与belong,最长公共子序列为blog(myblogs, belong),最长公共子串为lo(myblogs, b ...
- 实验二 动态规划算法 最长公共子序列问题
基本题一:最长公共子序列问题 一.实验目的与要求 1.熟悉最长公共子序列问题的算法: 2.初步掌握动态规划算法: 二.实验题 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,z ...
- 用动态规划解决最长公共子序列
要求:最长公共子序列,英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S ...
最新文章
- java子类对象不能调用父类protected方法和域的原因。
- springboot api版本控制_SpringBoot入门练习
- Redis运维和开发学习笔记(3)redis搭建集群
- 两个栈实现一个队列/两个队列实现一个栈
- 线性代数应该这样讲(二)
- 360 小程序来了,进攻 PC 端!
- PAT (Basic Level) Practice1024 科学计数法
- AJAX访问JSON数据
- c# Invalidate() Update() Refresh()的区别
- VMware虚拟机安装系统
- ev3编程变量模块_【EV3基础编程 第九课】用生活中随处可见的“数据变量”是我们的“好教材”。...
- 校园网ensp模拟搭建
- arduino环境下用ESP32连接PS2手柄
- ArcGIS10.0专题图制作文档
- 工兵扛军旗游戏新玩法
- layui表格点击按钮下方新增加空白行
- ObjectARX-学习笔记
- java开发 审核流程思路_java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】...
- md5sum命令的灵活运用
- [转载]如何在非443端口开https
热门文章
- 10 个优质的 Laravel 扩展推荐
- 修改服务器名后,sql server的配置处理
- 何时使用[self release]
- 【yii2调试神器】yii2-debug能力分析和配置项解析
- Bzoj 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset
- 假如,有这样的异性朋友真不错
- Spring下@ResponseBody响应中文内容乱码问题
- SystemCenterOperationsManager2012 SP1系列文章
- C#调用WebService
- Linux .bin安装文件制作