Temas relacionados :
Subsecuencia ascendente más larga
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);
}
}