1 条题解

  • 0
    @ 2024-12-24 10:06:03

    C :

    /*
     * =====================================================================================
     *
     *       Filename:  908.c
     *
     *    Description:  hahah LCS 
     *
     *        Version:  1.0
     *        Created:  2013/9/8 22:08:10
     *       Revision:  none
     *       Compiler:  gcc
     *
     *         Author:  mdk-vim.cpp-c (mdk), mengdaikun@gmail.com
     *        Company:  cjluacm-vim-mdk
     *
     * =====================================================================================
     */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #define MAX 100
    
    int dp[MAX][MAX];
    
    int max(int a, int b)
    {
        return a > b ? a : b ;
    }
    
    int main()
    {
        //freopen("a.in","r",stdin);
        
        char str1[MAX],str2[MAX];
        
        int i,j;
    
        int len1,len2;
    
        while(~scanf("%s %s",str1,str2))
        {
            
            len1 = strlen(str1);
            
            len2 = strlen(str2);
    
            for(i = 0 ; i <= len1 ; i++)
                
                dp[0][i] = 0;
    
            for(j = 0 ; j <= len2 ; j++)
    
                dp[j][0] = 0;
    
            for(j = 0 ; j < len1 ; j++)
            {
                for(i = 0 ; i < len2 ; i++)
                {
                    if(str1[j] == str2[i])
                        dp[i+1][j+1] = dp[i][j]+1;
                    else
                        dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);
                }
            }
    
            printf("%d\n",dp[len2][len1]);
        }
    
        return 0;
    }
    
    
    

    Java :

    import java.util.*;
    import java.io.*;
    import java.math.*;
    
    
    public class Main{
    	
    	public static Scanner cin=new Scanner(System.in);
    	public static String a,b;
    	public static int[][] dp;
    	public static int lena,lenb;
    	public static void main(String []args){
    		while(cin.hasNext()){
    			a=cin.next();
    			b=cin.next();
    			lena=a.length();
    			lenb=b.length();
    			dp=new int[lena][lenb];
    			for(int i=0;i<lena;i++){
    				for(int j=0;j<lenb;j++){
    					if(i==0&&j==0){
    						if(a.charAt(i)==b.charAt(j)){
    							dp[i][j]=1;
    						}else{
    							dp[i][j]=0;
    						}
    					}else if(i==0){
    						if(a.charAt(i)==b.charAt(j)){
    							dp[i][j]=1;
    						}else{
    							dp[i][j]=dp[i][j-1];
    						}
    					}else if(j==0){
    						if(a.charAt(i)==b.charAt(j)){
    							dp[i][j]=1;
    						}else{
    							dp[i][j]=dp[i-1][j];
    						}
    					}else{
    						if(a.charAt(i)==b.charAt(j)){
    							dp[i][j]=dp[i-1][j-1]+1;
    						}else{
    							dp[i][j]=Math.max(dp[i-1][j], dp[i][j-1]);
    						}
    					}
    				}
    			}
    			System.out.println(dp[lena-1][lenb-1]);
    		}
    	}
    }
    
    • 1

    信息

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