Baratos para comprar (estadísticas del programa LIS)

Significado de las preguntas: https://www.luogu.com.cn/problem/P1108

Si los dos números son idéntico número de columnas compuestas, entonces se dice que dos columnas idénticas.

Programa para encontrar el número de los más largos declive secuencia.


Solución a un problema de  wjyyy gran Dios.

En dp proceso, f matriz almacenada es la longitud de la más larga disminución secuencia, f subíndice f array i es el i medio final, los datos más largos gota secuencia (excepto el último fuera) se ha perdido, por lo tanto, ya no se aplica cuando la determinación de si los números de programa juntos.

Buscamos a partir de cero,

  1. Si el número del primer número con otro número de columnas de una primera fila de la misma cantidad, puede ahora ser determinada son iguales, es decir, se puede eliminar (código de procesamiento es T [J] = 0 ). Cuando se conecta a un número diferente en su parte posterior, y puede determinarse que las dos series, que no afecta a la otra. Debido a que las dos columnas se pueden transferir desde el mismo número de columnas de
  2. Si el número del primer número con otro número de columnas de una diferente fila de la primera serie, por lo que no son iguales, y no importa lo añadir de nuevo, no igual, es decir, no se eliminan, y luego continuar según el juicio convencional.

De los dos puntos anteriores, hemos eliminado el repetido, esto evita la doble contabilidad.

#include <bits / STDC ++ H.>
 el uso de  espacio de nombres STD;
 #define max (A, B) (A> B A :? B)
 int A [ 5009 ], F [ 5009 ], T [ 5009 ];
 // A [ i] está sujeto a precios de acciones, f [i] es la longitud del día i más larga
 // T [i] es el final del programa i 
int main () 
{ 
    int n-, MAXN = 0 ; 
    CIN >> n-;
     para ( int I = 1. ; I <= N-; I ++) CIN >> a [I], F [I] = 1. ;
     para ( int I = 1. ; I <= N-; I ++ ) 
    { 
        para( Int J = 1. ; J <I; J ++ ) 
        { 
            IF (A [I] < A [J]) 
                F [I] = max (F [I], F [J] + 1. ); 
        } // ahora es más largo buscan secuencia disminución normal de 
        MAXN = max (MAXN, F [I]); // en cuenta la longitud de la más larga 
        para ( int J = 1. ; J <I; J ++ ) 
        { 
            IF (F [I] == F [J] && A [I] == A [J]) // misma longitud y el número de columnas de idéntica 
                T [J] = 0 ;
             el otro  IF (F [I] == F [J] + . 1 && A [I] <A [J]) // se puede conectar delante de la
                t [i] + = t [j]; 
        } 
        Si (t [i]!) T [i] = 1 ; // 为了后面的数转移
    }    
     int ans = 0 ;
    para ( int i = 1 ; i <= n; i ++ )
         si (f [i] == maxN) ans + = t [i]; 
    cout << maxN << "  " << ans; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/iss-ue/p/12501951.html
Recomendado
Clasificación