(Jizhong) 1599.] [GDKOI2004 Kampfer (Kampfer) [fällt nicht die längste Sequenzoptimierung +]

(File IO): Eingang: camphor.in Ausgang: camphor.out
Zeitlimit: 1000 ms Platzbeschränkungen: 131072 KB spezifische Beschränkungen
Goto ProblemSet


Titel Beschreibung
Kampferholz bekannt als einer der vier berühmten Jiangnan sehr einzigartig, seine rauen Rinde, die Textur ist sehr gleichmäßig, nie gespalten fleckige Stelle von Pappel, Weide Knötchen Tumor nicht, ein Unterzweig Stamm zwei, zwei in vier langen Weg zu gehen, werden nicht geschnitten Ecken nicht überflüssig sein; Kronenform sphärisch ist , und den eleganten Bogen am Himmel ziehen. Zusätzlich zu den oben genannten Vorteilen hat Kampferbaum eine Geheimwaffe. Das heißt ........................ Mit seinem einfachen, schweren gutem Charakter , die Gunst eines kleinen Fuchses zu gewinnen! ! ! Zu sagen , dass ein Tag ein kleiner See Fuchs geht, ganz plötzlich Windstoß weht, eilte sie die Augen zu schließen. Als sie öffnete die Augen wieder und fand schönen See mehr aus einer ordentlichen Reihe von Kampfer. Kleiner Fuchs ist sehr aufgeregt, sie von jedem Baum, und die Anzahl der Anzahl der Blätter aufmerksam ist. Sie fühlte , dass , wenn die Anzahl der Blätter von zwei Bäumen neben prime zu schrill. So wird ein kleiner Fuchs wie Zeile aus der Vielzahl von Kampferbäumen ausgewählt, unter den Bedingungen , die Anzahl benachbarter Blätter der zwei Bäume erfüllen , ist coprime nicht, so dass der Baum so viel wie möglich.


Geben Sie
die erste Linie eine positive ganze Zahl n n , ausgedrückt n n Kampferbäume. Die zweite Zeile n n eine positive ganze Zahl, die ich ich die Zahl i stehtdie Anzahl der Blätter der Kampferbäume.

Ausgabe
eine positive ganze Zahl angibt , wie viele Bäume die Wahl auf.


Probeneingabe
. 6
. 6. 8 15 5 2 3

Beispielausgabe
4


Datenbereichsgrenzen
für 60 60 % -Angaben n < = 1000 n <= 1000     
Für 100 100 % der Daten n < = 100000 n <= 100000 , die Anzahl der Blätter < = 100000 <= 100000
Anmerkung: ihre Position nicht ändern kann,heißt die gewählte Baum, wenn das erste ausgewählte ( t 1 . t 2 . t 3 ... ... t n ) (T1, T2, T3 ...... tn) Baum, wobei t 1 < t 2 < t 3 < ... ... < t n t1 <t2 <t3 <...... <tn betrachtet t ich ti t ich + 1 ti + 1 Nachbar.


Tipp
Selection 1 1 ,die erste 3 3 , erster 4 4 Summe zuerst 6 6 Baum


Ideen zur Problemlösung
können wir nicht finden , dass dies eine der längsten Drop - Sequenz! ! ! Wir werden nur Bedingungen a [ i ] > = a [ j ] a [i]> = a [j] in a [ i ] a [ j ] a [i], a [j] ist der größte gemeinsame Teiler größer als eins, aber nur 60 60 Punkte. . InTat können wir j j ‚s 1 i 1 1 bis i-1 geändert i l o g ( i ) 2 i 1 i-log (i) * 2 到 i-1 , wird es nichtZeit, aber fragen Sie mich nichtwarum. .
A C AC gehen von ~


Code

#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);
}
Veröffentlicht 119 Originalarbeiten · erntete Lob 8 · Ansichten 4906

Ich denke du magst

Origin blog.csdn.net/kejin2019/article/details/105013833
Empfohlen
Rangfolge