Помогите решить, пожалуйста, такую задачу:
Задается натуральное число N и последовательность a1, …, aN из N целых чисел.
Мы можем вычеркнуть из этой последовательности какие-то элементы и получить строго возрастающую последовательность.
Требуется найти количество строго возрастающих последовательностей максимальной длины, которые мы можем получить вычеркиванием каких-то элементов из введенной последовательности.
Заранее, спасибо. Оля
Хоть кто-нибудь откликнитесь, пожалуйста, на эту задачу. Помогите решить!!!!!
{Quantity of Max Length Strictly Increasing Subchains}
{by Lapp for Olga}
const
n=8;
var
a,e:array[1..n]of integer;
i,j,k,l,m,x:integer;
Gr:boolean;
begin
//Randomize;
for i:=1 to n do begin
a[i]:=Random(n);
e[i]:=0;
Write(a[i]:5)
end;
WriteLn;
m:=1;
k:=1;
repeat
i:=1;
while e[i]=1 do if i<n then begin
e[i]:=0;
Inc(i)
end
else begin
WriteLn('Max Length is ',m,', total of ',k);
ReadLn;
Exit
end;
e[i]:=1;
l:=1;
Gr:=true;
x:=i;
for j:=i+1 to n do if e[j]=1 then begin
Inc(l);
if a[x]>=a[j] then Gr:=false else x:=j
end;
if Gr then if l>m then begin
m:=l;
k:=1
end
else if l=m then Inc(k)
until false
end.
Спасибо большое за реальную помощь. Я программу опробовала и попробую объяснить (может и не все правильно), как она работает.
Последовательность заполняется случайными числами.
m - максимальное кол-во чисел последовательности
к- количество последовательностей
Далее идет цикл с постусловием. Идет сравнение последующего числа с предыдущим. Выводится на печать "максимальная последовательность из __чисел и количество возможных последовательностей.
А далее я эту часть программы я затрудняюсь объяснить:
e[i]:=1;Если Вы можете, то поясните, пожалуйста.
l:=1;
Gr:=true;
x:=i;
for j:=i+1 to n do if e[j]=1 then begin
Inc(l);
if a[x]>=a[j] then Gr:=false else x:=j
end;
if Gr then if l>m then begin
m:=l;
k:=1
end
else if l=m then Inc(k)
until false
М | Ольга, при публикации программного текста обязательно используй теги! Lapp |