Ciudades hermanas del modelo de subsecuencia ascendente más largo

Temas relacionados :

Subsecuencia ascendente más larga

Ala delta de Kaito Kidd

Alpinismo

Intercepción de misiles

Descripción del Título:

Palmia tiene un gran río que corre de este a oeste, tiene orillas rectas al norte y al sur, y hay N ciudades con diferentes ubicaciones en cada orilla.

Cada ciudad de North Bank tiene una y solo una ciudad hermana en South Bank, y las ciudades hermanas de diferentes ciudades son diferentes.

Cada par de ciudades hermanas solicitó al gobierno abrir una vía fluvial recta en el río para conectar las dos ciudades, pero debido a la niebla en el río, el gobierno decidió evitar dos cruces de vías fluviales para evitar accidentes.

La programación ayuda al gobierno a tomar algunas decisiones para aprobar y rechazar solicitudes, de modo que se aprueben tantas solicitudes como sea posible y, al mismo tiempo, se garantiza que dos rutas no se crucen.
Formato de entrada

En la primera línea, un número entero N representa el número de ciudades.

Desde la línea 2 hasta la línea n + 1, cada línea contiene dos números enteros, separados por un espacio, que indican las coordenadas de un par de ciudades hermanas en la orilla sur y la orilla norte.
Formato de salida

Solo una línea, genera un número entero, que indica el número máximo de solicitudes que el gobierno puede aprobar.
rango de datos

1≤N≤5000,
0≤xi≤10000

Muestra de entrada :

7
22 4
2 6
10 3
15 12
9 8
17 17
4 2

Salida de muestra:

4

Ideas :

两条航线不能相交,相交的条件是a1>a2&&b1<b2(a1是航道1,b2是
航道2)要想不相交只需把航道a1按顺序排,再找排序后a1对应的航道b2
的最长子序列;

Código


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner input=new Scanner(System.in);
        int N=input.nextInt();
        PII arr[]=new PII[N+1];
        for(int i=1;i<=N;i++){
    
    
            int first=input.nextInt();
            int second=input.nextInt();
            arr[i]=new PII(first,second);
        }
        Arrays.sort(arr,1,N+1);
        int []dp=new int[N+1];
        int res=1;
        for(int i=1;i<=N;i++){
    
    
            dp[i]=1;
            for(int j=1;j<i;j++){
    
    
                if(arr[i].second>arr[j].second){
    
    
                    dp[i]=Math.max(dp[j]+1,dp[i]);
                    res=Math.max(dp[i],res);
                }
            }
        }
        System.out.println(res);

    }
}
class  PII implements Comparable<PII>{
    
    
    public   int first;
    public  int second;
    public PII(int first,int second){
    
    
        this.first=first;
        this.second=second;
    }
    public int compareTo(PII o){
    
    
        return  Integer.compare(this.first,o.first);
    }

}

Supongo que te gusta

Origin blog.csdn.net/qq_44844588/article/details/108339318
Recomendado
Clasificación