朱星滔 2010-08-21 00:26:00
点我顶贴
收藏
删除
var
n,i,j,k,ans1,ans:longint;
a,f:array[1..30000]of longint;
begin
readln(n);
for i:=1 to n do readln(a[i]);
for i:=n downto 1 do
begin
f[i]:=1;
for j:=i+1 to n do
if (a[i]>=a[j])and(f[i]<f[j]+1)then f[i]:=f[j]+1;
if f[i]>ans then ans:=f[i];
end;
fillchar(f,sizeof(f),0);
for i:=n downto 1 do
begin
f[i]:=1;
for j:=i+1 to n do
if (a[i]<=a[j])and(f[i]<f[j]+1)then f[i]:=f[j]+1;
if f[i]>ans1 then ans1:=f[i];
end;
if ans>ans1 then writeln(n-ans)
else writeln(n-ans1)
end.
求人教我优化
#3 dsqx71@2010-08-21 00:26:00
16957
回复
删除
我觉的这样的
先计算
拿1卡片的有多少牛 拿2卡片的有多少牛,拿3卡片的有多少,接着扫描输入数据
在扫描的时候有多种情况
1: 拿1的牛站在拿2的牛本该在的位置,tot+2;
2: 拿1的牛站在拿2的牛本该在的位置,同时有只拿2的牛在3的牛本该在的位置,tot+3