收集样本问题(num)

算法:DP

分析:跟传纸条是一个题,只不过本题算上了起点和终点,即从起点出发也要算上起点,因此在最后再加上起点和终点位置上的值即可。

program num;

const
 maxn=9;

var
 n:longint;
 a:array [0..maxn,0..maxn] of longint;
 f:array [0..maxn,0..maxn,0..maxn,0..maxn] of longint;

procedure init;
var
 x,y,v:longint;
begin
 readln(n);
 readln(x,y,v);
 while x+y+v<>0 do
  begin
   a[x,y]:=v;
   readln(x,y,v);
  end;
end;

function max(x,y:longint):longint;
begin
 if x>y then exit(x) else exit(y);
end;

procedure main;
var
 i,j,k,l:longint;
begin
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     for k:=1 to n do
      begin
       for l:=1 to n do
        begin
         if (i<>k) or (j<>l) then
          begin
           f[i,j,k,l]:=max(max(f[i-1,j,k-1,l],f[i,j-1,k,l-1]),max(f[i-1,j,k,l-1],f[i,j-1,k-1,l]))+a[i,j]+a[k,l];
          end;
        end;
      end;
    end;
  end;
end;

begin
 assign(input,'num.in'); reset(input);
 assign(output,'num.out'); rewrite(output);

 init;
 main;
 writeln(f[n-1,n,n,n-1]+a[1,1]+a[n,n]);

 close(input); close(output);
end.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值