| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这个题怎么听人说用floyed?我用的最长非降子序列
WA了
谁能讲讲啊?
我的程序
var
s:array[0..90,1..3]of longint;
f:array[1..90]of longint;
i,j,k,n,max:longint;
procedure swap(var x,y:longint);
var
t:longint;
begin
t:=x;
x:=y;
y:=t;
end;
begin
readln(n);
while n>0 do
begin
fillchar(s,sizeof(s),0);
fillchar(f,sizeof(f),0);
for i:=1 to n do
begin
for j:=1 to 3 do
read(s[3*i-2,j]);
readln;
for k:=1 downto 0 do
begin
for j:=1 to 2 do
s[3*i-k,j]:=s[3*i-k-1,j+1];
s[3*i-k,3]:=s[3*i-k-1,1];
end;
end;
for i:=1 to 3 do
s[0,i]:=0;
for i:=1 to 3*n do
begin
max:=i;
for j:=i+1 to 3*n do
if (s[max,1]<s[j,1])and(s[max,2]<s[j,2]) or (s[max,2]<s[j,1])and(s[max,1]<s[j,2])
then max:=j;
if max>i then
begin
swap(s[max,1],s[i,1]);
swap(s[max,2],s[i,2]);
swap(s[max,3],s[i,3]);
end;
end;
for i:=1 to 3*n do
f[i]:=s[i,3];
for i:=2 to 3*n do
for j:=1 to i-1 do
if ((s[i,1]<s[j,1])and(s[i,2]<s[j,2]) or (s[i,2]<s[j,1])and(s[i,1]<s[j,2]))and(f[j]+s[i,3]>f[i]) then f[i]:=f[j]+s[i,3];
max:=0;
for i:=1 to 3*n do
if max<f[i] then max:=f[i];
writeln(max);
readln(n);
end;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator