讨论 / why?
wwww 2008-10-18 22:17:00
点我顶贴 收藏 删除
var i,j,k,min1,min2,n:longint;

d1,d2,c,rest,need,cost:double;

p,d:array[0..101]of double;

begin

read(d1,c,d2,p[0],n);

d[0]:=0;d[n+1]:=d1;

for i:=1 to n do read(d[i],p[i]);

k:=0;rest:=0;cost:=0;

if d2=0 then begin write(’No Solution’);halt;end;

repeat

j:=k;min1:=0;min2:=0;

while (j<n+1)and(d[j+1]-d[k]<=c*d2) do

begin

inc(j);

if (min1=0)and(p[j]<p[k]) then min1:=j;

if (min2=0)or(p[j]<p[min2]) then min2:=j;

end;

if j=k then begin write(’No Solution’);halt;end;

if min1>0 then

begin

need:=(d[min1]-d[k])/d2;

if need<0 then need:=0;

cost:=cost+p[k]*need;

rest:=0;

k:=min1;

end

else begin

if c*d2<=d[n+1]-d[k] then need:=c*d2-rest

else need:=(d[n+1]-d[k])/d2-rest;

cost:=cost+need*p[k];

rest:=rest+need-(d[min2]-d[k])/d2;

k:=min2;

end;

until k=n+1;

write(cost:0:2);

end.

此程序总是WA一个,为什么呢?

#1 slzxqsk@2008-10-18 22:17:00
回复 删除
我是这样做的:

var

d1,d2,c,p,zd,s,y,yy,h,fy,k1,jp:real;

i,j,k,n,m,o:integer;

bo,boo:boolean;

a:array[1..2,0..1000] of real;

b:array[0..1000] of real;

begin

read(d1,c,d2,p,n);

zd:=c*d2;

a[2,0]:=p;y:=0;yy:=0;fy:=0;

a[1,0]:=0;b[0]:=0;m:=1;

if n=0 then

begin

if d1>zd then begin write(’No solution’);halt;end

else write(d1/d2*p:0:2);

end

else

begin

readln;

for i:=1 to n do

begin

readln(a[1,i],a[2,i]);

b[i]:=a[1,i]-a[1,i-1];

end;

b[n+1]:=d1-a[1,n];

for i:=1 to n do

if b[i]>zd then begin write(’No Solution’);halt;end;

bo:=false;

while bo=false do

begin

s:=0;boo:=false;

for i:=m to n+1 do

begin

s:=s+b[i];

if s>zd then break;

end;

i:=i-1;

for j:=m to i do

if a[2,j]<a[2,m-1] then

begin

h:=0;

boo:=true;

for k:=m to j do h:=h+b[k];

y:=h/d2-yy;

fy:=fy+y*a[2,m-1];

m:=j+1;

yy:=0;

break;

end;

if boo=false then

begin

if zd>s then begin writeln(((s/d2-yy)*a[2,m-1]+fy):0:2);halt;end

else begin

k1:=a[2,m];

for j:=m+1 to i do

if k1>a[2,j] then begin o:=j;k1:=a[2,j];jp:=a[1,j]-a[1,m-1];end;

y:=c-yy;

fy:=fy+y*a[2,m-1];

m:=o+1;

yy:=c-jp/d2;

end;

end;

end;

end;

end.

查看更多回复
提交回复