(Цзичжун) 1599.] [GDKOI2004 камфара (камфора) [не уронить самую длинную последовательность оптимизации +]

(IO File): вход: camphor.in выход: camphor.out
Ограничение по времени: 1000 мс пространственных ограничений: 131072 KB конкретные ограничения
Гото ПарсерКонтест


Название Описания не
камфорное дерево известно как один из четыре известных Jiangnan очень уникально, его грубой коры, текстура очень равномерная, никогда не разделить пестрое пятно тополя, ива опухоль узелков нет, ствол подотрасли два, два на четыре пройти долгий путь, не срезать углы не будут лишними, форма короны является сферической, и нарисуйте изящный изгиб в небе. В дополнение к перечисленным выше преимуществам, камфора дерево имеет секретное оружие. То есть ........................ С его простой, тяжелый хороший характер , чтобы выиграть пользу маленькой лисы! ! ! Сказать , что один день, небольшое озеро лис ходит, вдруг порыв ветра дуют, она поспешила закрыть глаза. Когда она снова открыла глаза и обнаружила прекрасный Lakeside больше из аккуратную ряда камфоры. Маленький лис очень волнуется, она наблюдательная каждое дерево, а количество количества листьев. Она чувствовала , что если число листьев двух деревьев соседнего штрихом быть сотрясение. Таким образом, небольшой лисы , как ряд , выбранный из множества камфоры деревьев, в условиях , удовлетворяющих число соседних листьев двух деревьев не являются взаимно простыми, так что дерево как можно больше.


Введите
в первой строке целое положительное число N N , выраженный N N камфоры деревьев. Вторая линия N N положительное целое число, то я я номер я представляет собой число листьев деревьев камфоры.

Выход
положительное целое число , показывающее , сколько деревьев до выборов.


Ввод пробы
. 6
. 6. 8 15. 2. 5 3

Пример вывода
4


Пределы диапазона данных
для 60 60 % Данные N < знак равно 1000 п <= 1000     
Для 100 100 % данных N < знак равно 100000 п <= 100000 , количество листьев < знак равно 100000 <= 100000
Примечание: выбранное дерево не может изменить свое положение, то есть, если выбран первый ( T 1 , T 2 , T 3 ... ... T N ) (Т1, Т2, Т3 ...... т) дерево,котором T 1 < T 2 < T 3 < ... ... < T N t1 <t2 <t3 <...... <т считается T я ти T я + 1 Ti + 1 сосед.


Совет
Выбор 1 1 , первый 3 3 , первая 4 4 сумма первой 6 6 дерево


Проблемные идеи
мы не можем найти , что это одна из самой длинной последовательности капли! ! ! Мы просто условие a [ i ] > = a [ j ] а [я]> = а [J] в a [ i ] a [ j ] а [I], а [J] наибольший общий делитель большечем один, но только 60 60 баллов. , На самом деле, мы можем j J «s 1 i 1 1-я 1 изменен i l o g ( i ) 2 i 1 я-лог (я) * 2 到 я-1 , это не будет таймаут, но не спрашивайте меняпочему. ,
A C переменный ток , чтобы перейти от ~


код

#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);
}
Опубликовано 119 оригинальных статей · вона похвала 8 · просмотров 4906

рекомендация

отblog.csdn.net/kejin2019/article/details/105013833
рекомендация