讨论 / 各位大神求救啊,为什么总有那么几个点过不去。。。
tonyyuan 2011-11-06 00:46:00
点我顶贴 收藏 删除
var

d,f:array[0..50,0..50,1..9] of longint;

g:array[0..50,0..50] of longint;

t:array[0..50] of longint;

n,m,i,min,max:longint;

procedure prepare;

var i,j:longint;

begin

for i:=0 to n-1 do begin

g[i,1]:=t[i];

for j:=2 to n do begin

g[i,j]:=(g[i,j-1]+t[(i+j-1) mod n]) mod 10;

end;

end;

end;

procedure main;

var

i,j,k,min,max,l,tem:longint;

begin

for i:=0 to n-1 do

for j:=1 to n do begin

d[i,j,1]:=g[i,j]; f[i,j,1]:=g[i,j];

for k:=2 to m do begin

min:=maxlongint; max:=0;

for l:=1 to j-1 do begin

tem:=d[i,l,k-1]*g[(i+l) mod n,j-l];

if tem<min then min:=tem;

if tem>max then max:=tem;

end;

d[i,j,k]:=min;

f[i,j,k]:=max;

end;

end;

end;

begin

readln(n,m);

fillchar(g,sizeof(g),0);

fillchar(t,sizeof(t),0);

fillchar(d,sizeof(d),0);

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

for i:=0 to n-1 do

begin

readln(t[i]);

t[i]:=(t[i]+10) mod 10;

end;

prepare;

main;

min:=maxlongint;

for i:=0 to n-1 do

if d[i,n,m]<min then min:=d[i,n,m];

max:=0;

for i:=0 to n-1 do

if f[i,n,m]>max then max:=f[i,n,m];

writeln(min);

writeln(max);

end.

.。。。。。。。。。。

d[a,b,c] 表示从第a个开始的b个数划分成c段的最小值

f..............................................................最大值

g[i,j]为从第i个数加j个的和

查看更多回复
提交回复