LIS 与 LCS

 

 

 

 例1:

 

import java.util.Scanner;
import java.util.Arrays;
class Main{
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        int n =sc.nextInt();
        int []a=new int[1001];
        for (int i=1;i<=n ;i++ )
        {
            a[i]=sc.nextInt();
        }
        int []dp=new int[1001];
        for(int i=1;i<=n;i++){
            dp[i]=1;
            for(int j=1;j<i;j++){
                if(j<i&&a[i]<=a[j]){
                    dp[i]=Math.max(dp[i],dp[j]+1);
                }
            }
            
        }
        Arrays.sort(dp);
        System.out.println(dp[dp.length-1]);
        
    }
}

例2:

 

import java.util.Scanner;
import java.util.Arrays;
class Main{
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int []a=new int [1001];
        int ans=-1;
        for(int i=1;i<=n;i++){
            a[i]=sc.nextInt();            
        }
        int []dp1=new int[1001];
        int []dp2=new int[1001];
        for(int i=1;i<=n;i++){
            dp1[i]=1;
            for(int j=1;j<i;j++){
                if(a[j]>=a[i]){
                    dp1[i]=Math.max(dp1[i],dp1[j]+1);
                }
            }
            
        }
        for(int i=n;i>=1;i--){
            dp2[i]=1;
            for(int j=n;j>i;j--){
                if(a[j]>=a[i]){
                    dp2[i]=Math.max(dp2[i],dp2[j]+1);
                }
            }
            
        }
    for(int i=1;i<=n;i++){
        ans=Math.max(ans,dp1[i]+dp2[i]-1);
    }
    System.out.println(n-ans);

    }
}

 例3:

 

import java.util.Scanner;
import java.util.Arrays;
class Main{
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        String s1=sc.nextLine();
        String s2=sc.nextLine();
        int [][]lcs=new int[1001][1001];
        for(int i=1;i<=s1.length();i++){
            for(int j=1;j<=s2.length();j++){
                if(s1.charAt(i-1)==s2.charAt(j-1)){
                    lcs[i][j]=lcs[i-1][j-1]+1;
                }else{
                    lcs[i][j]=Math.max(lcs[i][j-1],lcs[i-1][j]);
                }

            }
        }
    
        System.out.println(lcs[s1.length()][s2.length()]);
    }
}

例4:

 

import java.util.Scanner;
class Main{
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        String s =sc.nextLine();
        String s1="";
        int [][]dp=new int[3001][3001];
        char [] chars=s.toCharArray();
        for(int i=chars.length-1;i>=0;i--){
            s1+=chars[i];
        }
        for (int i=1;i<=s.length() ;i++ )
        {
            for (int j=1 ;j<=s1.length() ;j++ )
            {
                if(s.charAt(i-1)==s1.charAt(j-1))
                {
                    dp[i][j]=dp[i-1][j-1]+1;
                }else{
                    dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        int sums=s.length()-dp[s.length()][s1.length()];
        System.out.println(sums);
    }
}
原文地址:https://www.cnblogs.com/pythonbigdata/p/12797547.html