/*Common Subsequence
Time Limit: 1000MS

Memory Limit: 10000K
Total Submissions: 56416

Accepted: 23516
Description
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another sequence Z = < z1, z2, ..., zk > is a subsequence of X if there exists a strictly increasing sequence < i1, i2, ..., ik > of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = < a, b, f, c > is a subsequence of X = < a, b, c, f, b, c > with index sequence < 1, 2, 4, 6 >. Given two sequences X and Y the problem is to find the length of the maximum-length common subsequence of X and Y.
Input
The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct.
Output
For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
Sample Input
abcfbc         abfcab
programming    contest
abcd           mnp
Sample Output
4
2
0*/
题意:求两个字符串的最大公共子序列。
公共子序列:顺序相同的序列,不一定是紧挨着,但是顺序一定相同。
假定我们有如下两个序列
S1: 1 2 3 4 5 6
S2: 4 5 6 7 8 9
S1和S2有一个最长公共子序列为 4 5 6一个子序列不一定必须是连续的,即中间可以被其他字符分开,但它们的顺序必须正确的。
最长公共子序列不一定只有一个。
S1: h e l l oS2: l e o nS1和S2有一个最长公共子序列为 eo
源程序如下:

 #include<stdio.h>
#include<string.h>
#define maxn 1005
int n,m;//定义s1与s2的实际长度
int dp[maxn][maxn];//把当前子序列的长度存入
char s1[maxn],s2[maxn];//两个字符串
int main()
{int i,j;
    while(scanf("%s%s",s1,s2)==)
    {
        n=strlen(s1);//s1串长度
        m=strlen(s2);//s2串长度
        for( i=;i<=n;i++)//初始化dp
            for( j=;j<=m;j++)
                dp[i][j]=;
    for( i=;i<=n;i++)//dp数组从1,1开始利用
        for( j=;j<=m;j++)
        {
            if(s1[i-]==s2[j-])/*如果s1的第i-1个字符与s2的第j-1个字符相同,
   那么s1[i-1]与s[j-1]的最长子序列是s[i-2]与s[j-2]的最长子序列加一*/
                dp[i][j]=dp[i-][j-]+;
            else/*如果s1的第i-1个字符与s2的第j-1个字符不相同,
   那么s1[i-1]与s[j-1]的最长子序列是s[i-1]与s[j-2]的最长子序列
   或s[i-2]与s[j-1]的最长子序列之中最大的*/
                if(dp[i-][j]>=dp[i][j-])
                 dp[i][j]=dp[i-][j];
                 else
                 dp[i][j]=dp[i][j-];
        }//循环递归,最后的dp[n][m]一定是s1[n],s2[m]最大的子序列长度
        printf("%d\n",dp[n][m]); 
    }
    return ;
}

要点:

poj1458公共子序列 C语言的更多相关文章

  1. 最长公共子序列LCS(POJ1458)

    转载自:https://www.cnblogs.com/huashanqingzhu/p/7423745.html 题目链接:http://poj.org/problem?id=1458 题目大意:给 ...

  2. 最长公共子序列(POJ1458)

    题目链接:http://poj.org/problem?id=1458 题目大意:给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和 ...

  3. POJ-1458(LCS:最长公共子序列模板题)

    Common Subsequence POJ-1458 //最长公共子序列问题 #include<iostream> #include<algorithm> #include& ...

  4. poj1458 求最长公共子序列 经典DP

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45763   Accepted: 18 ...

  5. 最长公共子序列(POJ1458)

    给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致. Sample Input: abcfbc abfcabpr ...

  6. POJ-1458.CommonSubsequence.(DP:最长公共子序列裸题)

    本题大意:给出两个字符串,让你求出最长公共子序列的长度并输出. 本题思路:本题是经典的DP问题,由于是两个字符串,那么我们就用一个二维数组来进行区分,用dp[ i ][ j ]来表示在s1和s2中分别 ...

  7. C语言 · 最长公共子序列 · 最长字符序列

    算法提高篇有两个此类题目: 算法提高 最长字符序列   时间限制:1.0s   内存限制:256.0MB      最长字符序列 问题描述 设x(i), y(i), z(i)表示单个字符,则X={x( ...

  8. POJ-1458 Common Subsequence(线性动规,最长公共子序列问题)

    Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44464 Accepted: 18186 ...

  9. POJ1458 最长公共子序列

    描述: 给定两个字符串,求其最长公共子序列(不用连续), 输入: abc bcc programning content 输出: 2 2 解法: 动态规划. 定义dp[i][j]表示s1到i索引,以及 ...

随机推荐

  1. CENTOS 7 下安装 REDIS 5.0.6 完整步骤

    第一步:下载redis安装包 wget   http://download.redis.io/releases/redis-5.0.6.tar.gz 第二步:解压压缩包 tar -zxvf redis ...

  2. Cloud-init原理

    Ubuntu修改主机名后,重启自动恢复原来的主机名? 这是因为Ubuntu18.10上,默认安装并启动了cloud-init, 需要停止它的四个服务进程,才可以使用传统的方式修改主机名. cloud- ...

  3. vuex实现登录状态的存储,未登录状态不允许浏览

    基础思路就是使用vuex状态管理来存储登录状态(其实就是存一个值,例如token),然后在路由跳转前进行登录状态的判断,可以使用vue-router的全局前置守卫beforeEach,也可以使用路由独 ...

  4. nginx 日志之 access_log

    web服务器的访问日志是非常重要的,我们可以通过访问日志来分析用户的访问情况, 也可以通过访问日志发现一些异常访问,比如cc攻击. 格式: access_log /path/to/logfile fo ...

  5. [后渗透]Windows server 80端口复用后门

    0x01 简介 该后门的基本原理是使用Windows 的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门. 具体细节信息请参考:https://pap ...

  6. mongo helper

    import datetime import pymongo import click # 数据库基本信息 db_configs = { 'type': 'mongo', 'host': '127.0 ...

  7. [Gamma]Scrum Meeting#2

    github 本次会议项目由PM召开,时间为5月27日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客,组织例会 撰写博客,组织例会 swoip 前端显示屏幕,翻译 ...

  8. JavaScript初探系列(十)——Event

    一.绑定事件的两种方式 (一).方式一:onclick 举例: <body> <button>点我</button> <script> var btn ...

  9. 第08组 Alpha冲刺(4/4)

    小李的博客 作业博客 作业链接 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 11月20日了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任务. 实现地图功能 展示Git ...

  10. “sockaddr”: “struct”类型重定义的错误的解决办法《转》

    原帖地址:https://blog.csdn.net/clever101/article/details/100163301 windows.h和winsock2.h存在有类型重定义,往往体现在VC程 ...