ssl1463-公共子串【各种dp之1】

前言:

开始做练习题了,反正难度还是比较大的QAQ。比较dp。emmmmmmmmmmmmmmmmmmm


题目

大概就是给出两个字符串,蓝后让你求出他们相同的一串(but可以不连续 不连续还叫子串?)的长度。


输入

abcfbc
abfcab

输出

4


解题思路(不存在的思路)

看了看题目,不禁陷入沉思这道题有点水了。我们用f[i][j]来表示第一串前i个和第二串前j个的最大值。


代码

#include
#include
#include
using namespace std;
char s1[501],s2[501];
int n,m,f[501][501];
int main()
{
    scanf("%s %s",s1,s2);//输入
    n=strlen(s1);//求长度
    m=strlen(s2);//求长度×2 get√
    for (int i=1;i<=n;i++)
      for (int j=1;j<=m;j++)
      {
        f[i][j]=max(f[i-1][j],f[i][j-1]);
        //继承前面的最大值
        if (s1[i-1]==s2[j-1]) 
          f[i][j]=max(f[i-1][j-1]+1,f[i][j]);
        //如果这次是相同,就用上一个+1
      }
    printf("%d",f[n][m]);
    //输出
}

你可能感兴趣的:(dp)