zoukankan      html  css  js  c++  java
  • 最长公共子序列(dp)

    求最长公共子序列,比较出两个字符串的最长的序列。
    用动态规划求解







    1
    #include <bits/stdc++.h> 2 #define N 10005 3 #define mem(a) memset(a,0,sizeof(a)) 4 5 using namespace std; 6 int k[N][N]; 7 stack<char> s; 8 void substring(string s1,string s2){ 9 mem(k); 10 int slen,clen; 11 slen=s1.length(); 12 clen=s2.length(); 13 for(int i=1;i<=slen;i++){ 14 for(int j=1;j<=clen;j++){ 15 if(s1[i-1]==s2[j-1]){ 16 k[i][j]=k[i-1][j-1]+1; 17 }else{ 18 k[i][j]=max(k[i][j-1],k[i-1][j]); 19 } 20 } 21 } 22 for(int i=slen,j=clen;i>=1&&j>=1;){ 23 if(s1[i-1]==s2[j-1]){ 24 s.push(s1[i-1]); 25 i--,j--; 26 }else{ 27 if(k[i][j-1]>=k[i-1][j]){ 28 j--; 29 }else{ 30 i--; 31 } 32 } 33 } 34 } 35 36 int main(){ 37 string s1,s2; 38 cin>>s1>>s2; 39 substring(s1,s2); 40 while(!s.empty()){ 41 cout<<s.top(); 42 s.pop(); 43 } 44 cout<<endl; 45 return 0; 46 }
  • 相关阅读:
    K近邻法
    决策树
    朴素贝叶斯
    Git学习笔记
    【原】maven web项目eclipse搭建
    三道面试题
    72-74 流的考点
    57-71 容器考点
    四 java web考点
    五 数据库考点
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/7630077.html
Copyright © 2011-2022 走看看