讨论 / 大牛来找错(乘积最大).....
996760929 2009-01-15 16:28:00
点我顶贴 收藏 删除
var

a:array[1..40,1..30]of longint;

i,j,k,n,m,x,t,code:longint;

s:string;

function min(b,c:longint):longint;

begin

if b<c then exit(b)

else exit(c);

end;

function max(u,v:longint):longint;

begin

if u>v then exit(u)

else exit(v);

end;

begin

readln(n,m);

readln(s);

val(s,x);

for i:=1 to n do

a[i,0]:=x;

for i:=2 to n do

for j:=1 to i-1 do

for k:=j to i-1 do

begin

val(copy(s,k+1,i-k),t,code);

a[i,j]:=max(a[i,j],a[k,j-1]*t);

end;

write(a[n,m]);

end.

#1 lychees@2009-01-15 08:47:00
回复 删除
1.多余的min函数..

2.val(s,x);

for i:=1 to n do

a[i,0]:=x;

初始化过程是不对de...

第一句s字串的长度可能会超过x的字节范围..

3.不过更重要的问题是

a[i,j]数组表示的含义不是很清晰..

使得后面的语句就很难得到正确的结果..

#2 996760929@2009-01-15 16:28:00
回复 删除
我的思路是这样的,可是......

for i←1 to n do ans[i,0]←s1..si对应的整数数组;

for i←2 to n do          {阶段:枚举数串的长度}

for j←1 to min{i-1,m} do     {状态:枚举长度为i的数串中插入的’*’个数}

for k←j to i-1 do       {决策:枚举第j个’*’的插入位置}

begin

n←sk+1..si对应的整数数组;        {计算第j+1项}

ans[i,j]←max{ans[i,j], ans[k,j-1]*n};      {计算状态转移方程}

end;{for}

输出最大乘积ans[n,m];

查看更多回复
提交回复