算法:DP
数据中的每个数竟然都是连续且不重复的,这一点遗漏了,导致想到了很复杂的算法,复杂到连我自己都不知道怎么做了……
program vijos1474;
const
maxn=2500;
var
n:longint;
x,y,f:array [0..maxn] of longint;
procedure init;
var
i,j,t:longint;
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(t);
{让每一个值都对应上一个横纵坐标。}
x[t]:=i;
y[t]:=j;
end;
end;
end;
function max(x,y:longint):longint;
begin
if x>y then exit(x) else exit(y);
end;
procedure main;
var
i,j:longint;
begin
for i:=n*n-1 downto 1 do
begin
for j:=n*n downto i+1 do
f[i]:=max(f[i],f[j]+sqr(abs(x[j]-x[i])+abs(y[j]-y[i])));{打擂台,在所有的数中找一个最大的。}
end;
end;
begin
assign(input,'VJ1474.in'); reset(input);
assign(output,'VJ1474.out'); rewrite(output);
init;
main;
writeln(f[1]);
close(input); close(output);
end.
小结:真的是很裸啊~看错题的孩纸伤不起啊~