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.
2.val(s,x);
for i:=1 to n do
a[i,0]:=x;
初始化过程是不对de...
第一句s字串的长度可能会超过x的字节范围..
3.不过更重要的问题是
a[i,j]数组表示的含义不是很清晰..
使得后面的语句就很难得到正确的结果..
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];