简单题意
字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列<i0,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij=yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。(实在不好说,就翻译了。。。。。。。)
解题思路形成过程
感想
题读懂就耗费了好长时间(是不是理解力太差了),然后题目中还没给字符串的长度,这个题,真是。。。。无语了。。。。。
AC代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <fstream>
using namespace std;
char s1[1000];
char s2[1000];
int dp[1000][1000];
int main(){
ifstream cin("in.txt");
freopen("in.txt","r",stdin);
while(cin>>s1>>s2){
int a=strlen(s1);
int b=strlen(s2);
for(int i=0;i<a;i++)dp[i][0]=0;
for(int i=0;i<b;i++)dp[0][i]=0;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(s1[i-1]==s2[j-1]){
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];
}
}
}
cout<<dp[a][b]<<endl;
}
}