1 条题解

  • 0
    @ 2025-4-7 21:19:27

    C :

    #include<stdio.h>
    #include<string.h>
    
    int a[101][101];
    
    int LCS(const char *s1,const char *s2)
    {
    	int m=strlen(s1),n=strlen(s2);
    	int i,j;
    	a[0][0]=0;
    	for(i=1;i<=m;++i)
    		a[i][0]=0;
    	for(i=1;i<=n;++i)
    		a[0][i]=0;
    	for(i=1;i<=m;++i)
    		for(j=1;j<=n;++j)
    		{
    			if(s1[i-1]==s2[j-1])
    				a[i][j]=a[i-1][j-1]+1;
    			else if(a[i-1][j]>a[i][j-1])
    				a[i][j]=a[i-1][j];
    			else
    				a[i][j]=a[i][j-1];
    		}
    	return a[m][n];
    }
    
    int main()
    {
    	char s1[101],s2[101];
    	while(scanf("%s%s",s1,s2)!=EOF)
    		printf("%d\n",LCS(s1,s2));
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    
    int a[101][101];
    
    int LCS(const char *s1,const char *s2)
    {
    	int m=strlen(s1),n=strlen(s2);
    	int i,j;
    	a[0][0]=0;
    	for(i=1;i<=m;++i)
    		a[i][0]=0;
    	for(i=1;i<=n;++i)
    		a[0][i]=0;
    	for(i=1;i<=m;++i)
    		for(j=1;j<=n;++j)
    		{
    			if(s1[i-1]==s2[j-1])
    				a[i][j]=a[i-1][j-1]+1;
    			else if(a[i-1][j]>a[i][j-1])
    				a[i][j]=a[i-1][j];
    			else
    				a[i][j]=a[i][j-1];
    		}
    	return a[m][n];
    }
    
    int main()
    {
    	char s1[101],s2[101];
    	while(scanf("%s%s",s1,s2)!=EOF)
    		printf("%d\n",LCS(s1,s2));
    	return 0;
    }
    

    Pascal :

    program p1132;
    var f:array[0..100,0..100]of longint;
        s,t,h:string;
        i,j,k:longint;
        ans:longint;
    function max(x,y:longint):longint;
    begin if x>y then exit(x)else exit(y);end;
    begin
     while not eof do
      begin
       readln(h);
       i:=1;s:='';t:='';
       while h[i]<>' ' do
        begin
         s:=s+h[i];
         inc(i);
        end;
       inc(i);
       t:=copy(h,i,length(h));
       ans:=0;
       fillchar(f,sizeof(f),0);
       for i:=1to length(s) do
        for j:=1 to length(t) do
         if s[i]=t[j] then f[i,j]:=f[i-1,j-1]+1
         else f[i,j]:=max(f[i-1,j],f[i,j-1]);
       for i:=1 to length(s) do
        for j:=1to length(t) do
         if f[i,j]>ans then ans:=f[i,j];
       writeln(ans);
      end;
    end.
    

    Java :

    
    import java.math.BigInteger;
    import java.security.SecureRandom;
    import java.util.Scanner;
        
    
    class Main {
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		while(scanner.hasNext())
    		{
    			
    		
    			String s1 = scanner.next();
    			String s2 = scanner.next();
    			Integer[][]b = new Integer[102][102];
    			Integer[][]c = new Integer[102][102];
    			int m ,n;
    			m = s1.length();
    			n = s2.length();
    			int result = LCSLength(s1.toCharArray(),s2.toCharArray(),m,n,c,b);
    			System.out.println(result);
    		}
    	}
    	
    	
    	public static int LCSLength(char[] x, char[] y, int m, 
    			int n, Integer[][] c, Integer[][] b)
    	{
    		int i ,j;
    		
    		for(i = 0; i <= m; i++)
    			c[i][0] = 0;
    		for(i = 1; i <= n; i++)
    			c[0][i] = 0;
    		for(i = 1; i <= m; i++)
    		{
    			for(j = 1; j <= n; j++)
    			{
    				if(x[i - 1] == y[j - 1])
    				{
    					c[i][j] = c[i - 1][j - 1] + 1;
    					b[i][j] = 0;
    				}
    				else if(c[i - 1][j] >= c[i][j - 1])
    				{
    					c[i][j] = c[i - 1][j];
    					b[i][j] = 1;
    				}
    				else
    				{
    					c[i][j] = c[i][j - 1];
    					b[i][j] = -1;
    				}
    			}
    		}
    		return c[m][n];
    	}
    	
    
    }
    

    Python :

    #coding=utf-8
    def Matrix(rows,cols):
        matrix = [[[0,'#'] for col in range(cols+1)] for row in range(rows+1)]
        return matrix
    def printf(lst,str1,str2):
        (rows,cols)=(len(str1),len(str2))
        print ' '*6,
        for tmp in str2:
            print '%s  ' % tmp,
        print
        print ' '*2,
        for j in range(cols+1):
                print '%d:%s' % (lst[0][j][0],lst[0][j][1]),
        print 
        for i in range(1,rows+1):
            print '%s ' % str1[i-1],
            for j in range(cols+1):
                print '%d:%s' % (lst[i][j][0],lst[i][j][1]),
            print
        
    
    while True:
        [x,y]=raw_input().split()
        (m,n)=(len(x),len(y))
        mat = Matrix(m,n)#已经经过初始化
        for i in range(1,m+1):
            for j in range(1,n+1):
                #print "i=%d,j=%d" %(i,j)
                if x[i-1]==y[j-1]:
                    mat[i][j][0]=mat[i-1][j-1][0]+1
                    mat[i][j][1]='↖'
                elif mat[i-1][j][0]>=mat[i][j-1][0]:
                    mat[i][j][0]=mat[i-1][j][0]
                    mat[i][j][1]='↑'
                else:
                    mat[i][j][0]=mat[i][j-1][0]
                    mat[i][j][1]='←'
        #printf(mat,x,y)
        print mat[m][n][0]
        
       
           
    
    
    • 1

    信息

    ID
    1078
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者