讨论 / 求救!为何只有50分
消逝者 2012-05-22 00:35:00
点我顶贴 收藏 删除
var

f:array[0..100,0..100]of integer;

flower:array[1..100,1..100]of integer;

b:array[1..100,1..100]of integer;

fl,v,i,j,k,max,themax:integer;

procedure printf(i,j:integer);

begin

if i=1 then

exit

else

begin

printf(i-1,b[i,j]);

write(b[i,j],' ')

end

end;

begin

fillchar(b,sizeof(b),0);

fillchar(f,sizeof(f),0);

fillchar(flower,sizeof(flower),0);

readln(fl,v);

for i:=1 to v do

b[1,i]:=i;

for i:=1 to fl do

begin

for j:=1 to v do

read(flower[i,j]);

readln

end;

k:=v-fl;

for i:=1 to fl do

for j:=i to k+i do

if (f[i,j-1]-flower[i,j-1])>(f[i-1,j-1]) then

begin

f[i,j]:=f[i,j-1]-flower[i,j-1]+flower[i,j];

b[i,j]:=b[i,j-1]

end

else

begin

f[i,j]:=f[i-1,j-1]+flower[i,j];

b[i,j]:=j-1

end;

max:=0;

for j:=fl to v do

if f[fl,j]>max then

begin

max:=f[fl,j];

themax:=j

end;

writeln(max);

printf(fl,themax);

write(themax);

end.

#1 垃圾桶@2012-05-06 07:52:00
回复 删除
负数

这种写法负值会被跳过,我的方案是把每个a【i,j】的值都加上500使其成为正数,最后输出最大值时再减掉n*500

#2 wangzeyukk@2012-05-07 17:49:00
回复 删除
a

a

#3 老瓜子@2012-05-22 00:33:00
回复 删除
6

#4 老瓜子@2012-05-22 00:34:00
回复 删除
5

5

#5 老瓜子@2012-05-22 00:34:00
回复 删除
250

250

#6 老瓜子@2012-05-22 00:34:00
回复 删除
290(250+38+2)

290(250+38+2)

#7 老瓜子@2012-05-22 00:34:00
回复 删除
303(250+38+2+13点)

303(250+38+2+13点)

#8 老瓜子@2012-05-22 00:35:00
回复 删除
19000(250*38*2)

19000(250*38*2)

#9 老瓜子@2012-05-22 00:35:00
回复 删除
247000(250*38*2*13点)

247000(250*38*2*13点)

查看更多回复
提交回复