1 条题解

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

    C :

    #include <stdio.h>
    #include <string.h>
    
    #define Max 100
    
    int main ()
    {
    	char stra[Max+1];
    	char strb[Max+1];
    	int dp[Max+1][Max+1];
    	while(gets(stra))
    	{
    		gets(strb);
    		int lena=strlen(stra);
    		int lenb=strlen(strb);
    		for(int i=0;i<=lenb;i++)
    			dp[0][i]=0;
    		for(int i=0;i<=lena;i++)
    			dp[i][0]=0;
    		for(int i=1;i<=lena;i++)
    			for(int j=1;j<=lenb;j++)
    			{
    				if(stra[i-1]==strb[j-1])
    					dp[i][j]=dp[i-1][j-1]+1;
    				else
    				{
    					if(dp[i-1][j]<dp[i][j-1])
    						dp[i][j]=dp[i][j-1];
    					else
    						dp[i][j]=dp[i-1][j];
    				}
    			}
    		//for(int i=0;i<=lena;i++)
    		//{
    		//	for(int j=0;j<=lenb;j++)
    		//		printf("%d ",dp[i][j]);
    		//	printf("\n");
    		//}
    		printf("%d\n",dp[lena][lenb]);
    	}
    }
    

    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;
    }
    

    Java :

    import java.util.Scanner;
    
    
    public class Main {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner s=new Scanner(System.in);
    		String a,b="123";
    		//System.out.println(b.charAt(0));
    		while(s.hasNext()){
    			a=s.next();
    			b=s.next();
    			int map[][]=new int[101][101];
    			for(int i=0;i<101;i++)
    				for(int j=0;j<101;j++) map[i][j]=0;
    			for(int i=1;i<=a.length();i++)
    				for(int j=1;j<=b.length();j++){
    					if(a.charAt(i-1)==b.charAt(j-1)) map[i][j]=map[i-1][j-1]+1;
    					else
    						map[i][j]=Math.max(map[i-1][j],map[i][j-1]);
    					
    				}
    			System.out.println(map[a.length()][b.length()]);
    			
    		}
    		
    	}
    
    }
    
    
    • 1

    信息

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