(Jizhong) 1599.] [alcanfor GDKOI2004 (alcanfor) [no baja la más larga optimización de la secuencia +]

(File IO): Entrada: camphor.in de salida: camphor.out
límite de tiempo: 1000 ms limitaciones de espacio: 131072 KB restricciones específicas
Goto Boletín de problemas


Título Descripción
madera de alcanfor conocido como uno de los cuatro famosos Jiangnan muy singular, su corteza áspera, la textura es muy uniforme, nunca se dividió punto moteada de chopo, sauce del tumor sin nódulos; un tronco subrama dos, dos en cuatro largo camino por recorrer, no esquinas cortadas no será superfluo; forma de corona es esférica, y dibujar la curva agraciado en el cielo. Además de las ventajas anteriores, árbol de alcanfor tiene un arma secreta. Eso es ........................ Con su simple, carácter pesado buena para ganar el favor de un pequeño zorro! ! ! Diciendo que un día, un pequeño lago Fox está caminando, todos una repentina ráfaga de viento que sopla, se apresuró a cerrar los ojos. Cuando abrió los ojos de nuevo y se encontró junto al lago más hermoso de una fila ordenada de alcanfor. Pequeño zorro está muy excitado, que es observador de cada árbol, y el número del número de sus hojas. Ella sentía que si el número de hojas de dos árboles adyacentes al primer ser irritante. Así, un pequeño zorro como fila seleccionada de la pluralidad de árboles de alcanfor, en las condiciones que satisfacen el número de hojas adyacentes de los dos árboles no son primos entre sí, de modo que el árbol tanto como sea posible.


Introduzca
la primera línea de un número entero positivo norte norte , expresado norte norte árboles de alcanfor. La segunda línea norte norte un número entero positivo, la yo yo el número i representa el número de hojas de árboles de alcanfor.

Salida de
un número entero positivo que indica el número de árboles a las elecciones.


entrada de la muestra
. 6
. 6. 8 15. 5 2. 3

Ejemplo de salida
4


límites del rango de datos
para 60 60 % de datos norte < = 1000 n <= 1000     
Para 100 100 % de los datos norte < = 100000 n <= 100 000 , el número de hojas < = 100000 <= 100000
Nota: el árbol seleccionado no puede cambiar su posición, es decir, si la primera seleccionada ( t 1 , t 2 , t 3 ... ... t norte ) (T1, T2, T3 ...... tn) de árbol, en donde t 1 < t 2 < t 3 < ... ... < t norte t1 <t2 <t3 <...... <tn considerado t yo TI t yo + 1 ti + 1 vecino.


Tip
Selección 1 1 , la primera 3 3 , primero 4 4 suma primero 6 6 árboles


Ideas de resolución de problemas
que no podemos encontrar que este es uno de la serie de caídas más larga! ! ! Nos limitaremos a las condiciones a [ i ] > = a [ j ] a [i]> = a [j] en a [ i ] a [ j ] a [i], a [j] es el mayor divisor común mayor que uno, pero sólo 60 60 puntos. . De hecho, podemos j j 's 1 i 1 1 a i-1 cambiado i l o g ( i ) 2 i 1 i-log (i) * 2 到 i-1 , no habrá tiempo de espera, pero no me pregunte por qué. .
A C C.A. para ir de ~


código

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int a[100010],n,f[100010],ans;
int check(int x,int y)
{
     if(x%y==0)
	return y;
     else
	return check(y,x%y);
}
int log(int x){
    int t=0;
    while(x>0)
    {
	x=x/2;
	t++;
     }
    return t;
}
int main(){
    freopen("camphor.in","r",stdin);
    freopen("camphor.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
	scanf("%d",&a[i]);
	f[i]=1;
    }
    for(int i=2;i<=n;i++)
    {
	for(int j=i-log(i)*2;j<=i-1;j++)
		if (j>0)
	    	if(check(a[i],a[j])>1)
			    f[i]=max(f[i],f[j]+1);
    }
    for(int i=1;i<=n;i++)
        if(f[i]>ans) 
	   ans=f[i];
    printf("%d",ans);
}
Publicados 119 artículos originales · ganado elogios 8 · vistas 4906

Supongo que te gusta

Origin blog.csdn.net/kejin2019/article/details/105013833
Recomendado
Clasificación