讨论 / 求pascal的贪心代码
hy780 2011-07-13 20:18:00
点我顶贴 收藏 删除
我用贪心总是有bug, 希望最好讲讲算法详细点
#1 hy780@2010-06-02 09:49:00
回复 删除
我自己已经解决了

另附代码 以供参考

program hy;

var a,b:array[-100..100000]of longint;

i,j,n,m,h,t,k,p,s,l:longint;

begin

repeat

read(n);

for i:=1 to n do

read(a[i]);

for i:=1 to n do

read(b[i]);

for i:=1 to n-1 do

for j:=n downto i+1 do

begin

if a[j-1]>a[j] then

begin

t:=a[j];

a[j]:=a[j-1];

a[j-1]:=t;

end;

if b[j-1]>b[j] then

begin

t:=b[j];

b[j]:=b[j-1];

b[j-1]:=t;

end;

end;

h:=0;

i:=1;

k:=1;

j:=n;

s:=n;

p:=0;

if n=0 then halt;

repeat

p:=p+1;

l:=0;

if (a[i]<b[k])and(l=0) then begin l:=1; h:=h-200; i:=i+1; j:=j-1; end;

if (a[i]>b[k])and(l=0) then begin l:=1; h:=h+200; i:=i+1; k:=k+1; end;

if (a[i]=b[k])and(l=0) then begin

if (a[s]>b[j])and(l=0) then

begin l:=1; h:=h+200; s:=s-1; j:=j-1; end;

if (a[s]<b[j])and(l=0) then

begin l:=1; h:=h-200; i:=i+1; j:=j-1; end;

if (a[s]=b[j])and(l=0) then begin

if (a[i]=b[j])and(l=0)

then begin j:=j-1; s:=s-1; l:=1; end;

if (a[i]<>b[j])and(l=0)

then begin h:=h-200; i:=i+1; j:=j-1; l:=1; end;

end;

end;

until p=n;

write(h);

writeln;

until n=0;

end.

#2 热心人士@2011-07-13 20:18:00
回复 删除
if a<b then a:=b;
查看更多回复
提交回复