HDU1159-Common Subsequence-LCS

上次写题解写到一半,写的比较具体,没写完,忘记存草稿了。。。导致现在没心情了。

Common Subsequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 39661    Accepted Submission(s): 18228

Problem 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.
The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. 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

题意就是求两个字符串的最长公共子序列的长度。

LCS入门。

模板。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
char s1[N],s2[N];
int dp[N][N];
int len1,len2;
void fun(){
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=len1;i++){
        for(int j=1;j<=len2;j++){
            if(s1[i-1]==s2[j-1])
                dp[i][j]=dp[i-1][j-1]+1;
            else
                dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
        }
    }
}
int main(){
   while(~scanf("%s%s",&s1,&s2)){
    len1=strlen(s1);
    len2=strlen(s2);
    fun();
    printf("%d\n",dp[len1][len2]);
   }
   return 0;
}
时间: 2024-10-12 07:53:23

HDU1159-Common Subsequence-LCS的相关文章

hdu-1159 Common Subsequence (dp中的lcs问题)

Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 38425    Accepted Submission(s): 17634 Problem Description A subsequence of a given sequence is the given sequence with some el

HDU1159 &amp;&amp; POJ1458:Common Subsequence(LCS)

Problem 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 stri

POJ - 1458 - Common Subsequence (LCS)

题目传送:Common Subsequence 思路:LCS AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #i

HDU-1159 Common Subsequence 最长上升子序列

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9595    Accepted Submission(s): 3923 Problem Description A subsequence of a given sequence is the given sequence with some elements (possible none

解题报告 HDU1159 Common Subsequence

Common Subsequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u 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&g

HDU-1159 Common Subsequence(动态规划2)

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

HDU1159 &amp;&amp; POJ1458 Common Subsequence (LCS模版题)

题目大意:求出两个串的公共子序列的长度 LCS的入门题,读懂题了直接模板就可以 #include <iostream> #include <cstring> using namespace std; const int N=1000; int a[N][N]; int LCS(const char *s1, const char *s2) {// s1:0...m, s2:0...n int m = strlen(s1), n = strlen(s2); int i, j; a[0

解题报告:hdu1159 common consequence LCS裸题

2017-09-02 17:07:42 writer:pprp 通过这个题温习了一下刚学的LCS 代码如下: /* @theme:hdu1159 @writer:pprp @begin:17:01 @end:17:06 @declare:LCS的裸题,温习一下 @error:从1开始读入的话,用strlen也要从1开始测才可以 @date:2017/9/2 */ #include <bits/stdc++.h> using namespace std; char s1[1010],s2[101

Longest Common Subsequence (LCS)

最长公共子序列(LCS)是经典的DP问题,求序列a[1...n], b[1..m]的LCS. 状态是DP[i][j],表示a[1..i],b[1..j]的LCS. DP转移方程是 DP[i][j]= DP[i-1][j-1]+1, a[i] == b[j] max{ DP[i][j-1], DP[i-1][j] }, a[i] != b[i]  ----------------------------------------------------------------------------

HDU 1159 Common Subsequence (LCS)

题意:给定两行字符串,求最长公共子序列. 析:dp[i][j] 表示第一串以 i 个结尾和第二个串以 j 个结尾,最长公共子序列,剩下的就简单了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <