2 条题解

  • 0
    @ 2025-11-22 16:00:49
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1005;
    int dp[N][N]={0};
    int main() {
        string s1, s2;
        cin >> s1 >> s2;
        int len1=s1.size(), len2=s2.size();
        for(int i=0; i<len1; i++) {
            dp[i][0]=0;
        }
        for(int j=0; j<len2; j++) {
            dp[0][j]=0;
        }
        for(int i=1; i<=len1; i++) {
            for(int j=1; j<=len2; j++) {
                if(s1[i-1]==s2[j-1]) {
                    dp[i][j]=dp[i-1][j-1]+1;
                } else {
                    dp[i][j]=max(dp[i-1][j], dp[i][j-1]);}
            }
        }
        cout << dp[len1][len2] << endl;
    }
    
    • 0
      @ 2025-9-9 23:46:55

      C :

      #include "stdio.h"
      #include "string.h"
      int n,m;
      char a[5002],b[5002];
      int f[2][5001];
      int max(int a,int b)
      {
      	if(a>b)
      		return a;
      	return b;
      }
      int main()
      {
      	int i,j;
      	scanf("%s%s",a,b);
      	n=strlen(a);
      	m=strlen(b);
      	for(i=1;i<=n;i++)
      	{
      		for(j=1;j<=m;j++)
      		{
      			if(a[i-1]==b[j-1])
      				f[i%2][j]=f[(i-1)%2][j-1]+1;
      			else
      				f[i%2][j]=max(f[(i-1)%2][j],f[i%2][j-1]);
      		}
      	}
      	printf("%d\n",f[n%2][m]);
      	return 0;
      }
      

      C++ :

      //最长公共子序列 
      #include<iostream>
      #include<fstream>
      #include<string>
      using namespace std;
      const int N=1005;
      int f[N][N]={0};
      int main()
      {
      	//ifstream cin("lcs.in");
      	//ofstream cout("lcs.out");
      	string s1,s2;
      	cin>>s1>>s2;
      	int len1=s1.size(),len2=s2.size();
      	for (int i=0;i<len1;i++) f[i][0]=0;
      	for (int j=0;j<len2;j++) f[0][j]=0;
      	for (int i=1;i<=len1;i++)
      		for (int j=1;j<=len2;j++)
      			if (s1[i-1]==s2[j-1])
      				f[i][j]=f[i-1][j-1]+1;
      			else f[i][j]=max(f[i-1][j],f[i][j-1]);
      	cout<<f[len1][len2]<<endl;
      	//system("pause");
      	return 0;
      }
      

      Java :

      import java.util.Scanner;
      
      
      public class Main {
      	static String s1,s2;
      	static int[][] dp = new int[1005][1005];
      	public static void main(String[] args) {
      		Scanner in = new Scanner(System.in);
      		while(in.hasNext()){
      			s1 = in.next();
      			s2 = in.next();
      			solve();
      		}
      	}
      
      	public static void solve() {
      		int size1 = s1.length();
      		int size2 = s2.length();
      		if (size1 == 0 || size2 == 0)
      			return ;
      		for (int i = 1; i <= size1; i++) {
      			for (int j = 1; j <= size2; j++) {
      				if (s1.charAt(i - 1) == s2.charAt(j - 1))
      					dp[i][j] = dp[i - 1][j - 1] + 1;
      				else
      					dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j]
      							: dp[i][j - 1];
      			}
      		}
      		System.out.println(dp[size1][size2]);
      	}
      }
      
      
      • 1

      信息

      ID
      1114
      时间
      1000ms
      内存
      128MiB
      难度
      9
      标签
      递交数
      11
      已通过
      3
      上传者