noip-2000乘积最大 2008.11.5

noip-2000乘积最大 2008.11.5

一直wa掉一组,却找不到原因

我的

program cjzd;
const fin='cjzd.in';fout='cjzd.out';
      maxn=41;maxm=7;
var f1,f2:text;
    n,m,i,j,code:longint;
    f:array[0..maxn,-1..maxm]of int64;
    g:array[0..maxn,0..maxn]of int64;
    a:string;
procedure init;
var i,j:longint;t:string;
begin
  assign(f1,fin);reset(f1);
  assign(f2,fout);rewrite(f2);
  readln(f1,n,m);
  readln(f1,a);
  fillchar(f,sizeof(f),0);
  fillchar(g,sizeof(g),0);
    for i:=1 to n do
    for j:=1 to n-i+1 do
      val(copy(a,i,j),g[i,i+j-1],code);



  for i:=1 to n do
      f[i,0]:=g[1,i];
end;
procedure dp;
var i,j,max,nn,k:longint;
begin
  for i:=1 to n do
    for j:=0 to m do
      for k:=1 to i-1 do
       begin   nn:=f[k,j-1]*g[k+1,i];
        if nn>f[i,j] then f[i,j]:=nn;
       end;
  writeln(f2,f[n,m]);

end;




begin
  init;
  dp;
  close(f1);close(f2);
end.

标成:

program EmberAsh;
var
a:array[0..40,0..40]of int64;
f:array[0..100,0..100]of int64;
s,t:string;
i,j,k,ss,max,n,m:longint;

BEGIN
assign(input,'cjzd.in');reset(input);
assign(output,'cjzd.out');rewrite(output);
readln(n,m);
readln(s);
for i:=1 to n do
  for j:=i to n do
    begin
    t:=copy(s,i,j-i+1);
    val(t,a[i,j]);
    //a[j,i]:=a[i,j];
    end;
for i:=1 to n do
  f[i,1]:=a[1,i];{边界}
for i:=1 to n do
  for j:=1 to m+1 do
    for k:=1 to i-1 do
      if f[k,j-1]*a[k+1,i]>=f[i,j] then
        f[i,j]:=f[k,j-1]*a[k+1,i];
      for i:=1 to n do
        begin
          for j:=1 to m do
            write(f[i,j]:5);
          writeln;
        end;
writeln(f[n,m+1]);
close(input);close(output);
END.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值