zoukankan      html  css  js  c++  java
  • POJ 1458 Common Subsequence

    传送门:http://poj.org/problem?id=1458

    解题思路:

    简单的最长公共子序列。

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    const int MAXN=1000;
    int dp[MAXN][MAXN];
    
    
    int main(){
        string str1,str2;
        while(cin>>str1>>str2){
            int n=str1.size();
            int m=str2.size();
    
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(str1[i-1]==str2[j-1])
                        dp[i][j]=dp[i-1][j-1]+1;
                    else
                        dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                }
            }
    
            printf("%d
    ",dp[n][m]);
        }
    }

    二维数组实现:

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    const int MAXN=1000;
    int dp[2][MAXN];
    
    
    int main(){
        string str1,str2;
        while(cin>>str1>>str2){
            int n=str1.size();
            int m=str2.size();
    
            memset(dp,0,sizeof(dp));
    
            int fg=0;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(str1[i-1]==str2[j-1])
                        dp[fg][j]=dp[!fg][j-1]+1;
                    else
                        dp[fg][j]=max(dp[!fg][j],dp[fg][j-1]);
                }
                fg^=1;
            }
    
            printf("%d
    ",max(dp[0][m],dp[1][m]));
        }
    }
    自己选的路,跪着也要把它走完------ACM坑
  • 相关阅读:
    052-141
    052-140
    052-139
    052-138
    需要做笔记的页面
    日期总是显示1900/01/01 0:00:00
    延迟加载的树控件
    (简单)关于summary的注释
    江南检测
    fineui动态添加用户控件
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6627177.html
Copyright © 2011-2022 走看看