求最长公共子序列 递推

来源:互联网 发布:java实现饼状图 编辑:程序博客网 时间:2024/05/15 11:05
    求最长公共子序列 递推      void solve() {          for (int i = 0; i < n; ++i) {              for (int j = 0; j < m; ++j) {                  if (s1[i] == s2[j]) {                      dp[i + 1][j + 1] = dp[i][j] + 1;                  }                  else {                      dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);                  }              }          }      }  

nyoj 36 最长公共子序列 http://acm.nyist.net/JudgeOnline/problem.php?pid=36&rec=rec

#include <cstdio>#include <iostream>#include <algorithm>#include<string.h>using namespace std;int n,m;      char s1[1010];            char s2[1010];int dp[1010][1010];  void solve() {        for (int i = 0; i < n; ++i) {            for (int j = 0; j < m; ++j) {                if (s1[i] == s2[j]) {                    dp[i + 1][j + 1] = dp[i][j] + 1;                }                else {                    dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);                }            }        }    }    int main()    {        int t;        scanf("%d",&t);        while(t--)        {            scanf("%s%s",s1,s2);            n = strlen(s1);            m = strlen(s2);            solve();            printf("%d\n",dp[n][m]);        }        return 0;    }
0 0