社区讨论
递归不知道哪里写错了。求大神扫两眼。
P1004[NOIP 2000 提高组] 方格取数参与者 5已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi4eqqr5
- 此快照首次捕获于
- 2025/11/18 18:05 4 个月前
- 此快照最后确认于
- 2025/11/18 18:05 4 个月前
CPP
type pp=record
num:integer;
flag:boolean;
end;
var n,a,b,c,i:integer;
pos:array[1..9,1..9]of pp;
function max(a1,a2,a3,a4:integer):integer;
begin
if (a1>=a2)and(a1>=a3)and(a1>=a4) then max:=a1;
if (a2>=a1)and(a2>=a3)and(a2>=a4) then max:=a2;
if (a3>=a2)and(a3>=a1)and(a3>=a4) then max:=a3;
if (a4>=a2)and(a4>=a3)and(a4>=a1) then max:=a4;
end;
function value(x:pp):integer;
begin
if not x.flag then value:=x.num
else value:=0;
end;
function f(k,i1,i2:integer):integer;//f为走了k步,第一第二枚棋子横坐标为i1 i2时的最大数
var j1,j2:integer;
begin
j1:=k-i1;
j2:=k-i2;
pos[i1,j1].flag:=true;
pos[i2,j2].flag:=true;
if i1=i2 then
if i1=1 then f:=0
else if j1=1 then f:=f(k-1,i1-1,i2-1)+value(pos[i1-1,j1])
else f:=max(f(k-1,i1-1,i2)+value(pos[i1-1,j1]),f(k-1,i1,i2-1)+value(pos[i1,j1-1]),0,0)
else f:=max(f(k-1,i1-1,i2-1)+value(pos[i1-1,j1])+value(pos[i2-1,j2]),f(k-1,i1-1,i2)+value(pos[i1-1,j1])+value(pos[i2,j2-1]),f(k-1,i1,i2-1)+value(pos[i1,j1-1])+value(pos[i2-1,j2]),f(k-1,i1,i2)+value(pos[i1,j1-1])+value(pos[i2,j2-1]));
pos[i1,j1].flag:=false;
pos[i2,j2].flag:=false;
end;
begin
readln(n);
c:=1;
while c<>0 do
begin
readln(a,b,c);
if c=0 then break;
pos[a,b].num:=c;
end;
write(f(2*n-2,n,n));
end.
回复
共 4 条回复,欢迎继续交流。
正在加载回复...