讨论 / 我超时了 额 90分
朱星滔 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.

求人教我优化

#1 dsqx71@2010-08-21 00:12:00
回复 删除
..这是合唱队形吗?

....

#2 dsqx71@2010-08-21 00:21:00
回复 删除
我错了...

这是一道贪心

#3 dsqx71@2010-08-21 00:26:00
回复 删除
我觉的这样的

先计算

拿1卡片的有多少牛 拿2卡片的有多少牛,拿3卡片的有多少,接着扫描输入数据

在扫描的时候有多种情况

1: 拿1的牛站在拿2的牛本该在的位置,tot+2;

2: 拿1的牛站在拿2的牛本该在的位置,同时有只拿2的牛在3的牛本该在的位置,tot+3

查看更多回复
提交回复