NUM.ONE
普通n2做法:
var a,f:array[1..500]of longint;
var i,j,k,l,m,n,max:longint;
begin
read(n);
for i:=1 to n do
read(a[i]);
fillchar(f,sizeof(f),0);
f[1]:=1;
for i:=1 to n do
for j:=1 to i-1 do
begin
if (a[i]>a[j])and(f[i]<f[j]+1)then
f[i]:=f[j]+1;
end;
max:=0;
for i:=1 to n do
if f[i]>max then
max:=f[i];
writeln(max);
end.
NUM.TWO
优化nlogn做法:
var i,j,k,top,n:longint;
a,b:array[0..5000]of longint;
begin
readln(n);
for i:=1 to n do
read(a[i]) ;
fillchar(b,sizeof(b),0);
top:=1;
b[1]:=a[1];
for i:=2 to n do
begin
if a[i]>=b[top] then
begin
top:=top+1;
b[top]:=a[i];
end
else
begin
for j:=1 to top-1 do
begin
if a[i]>=b[j] then
begin
end
else
b[j]:=a[i];
end;
end;
end;
writeln(top);
end.