• 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坑
  • 相关阅读:
    面试总结
    java高级开发
    idea的快捷键
    微服务面试题目
    windows下jenkins的安装与配置
    微服务面试集合
    springlcoud中使用consul作为注册中心
    乐观锁和悲观锁
    volatile与synchronized的区别
    Java CAS 和ABA问题
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6627177.html
Copyright © 2020-2023  润新知