原因估计是 作者的标程中剪枝写的是 if dep>=best-1 ...
但是由于本题要求输出方案,不能这样剪枝。
http://www.rqnoj.cn/Status_Show.asp?SID=955492 这个是WA70
http://www.rqnoj.cn/Status_Show.asp?SID=955495 这个是AC
AC程序
program rq286;
var n:longint;
best,t:longint;
que,bestque:array[1..20] of longint;
getmin:array[1..1000] of longint;
rect:qword;
const maxint=$3f3f3f3f;
procedure dfs(stp:longint);
var i,j:longint;
begin
if que[stp]=n then begin
if stp<best then begin
best:=stp;
bestque:=que;
end else if stp=best then begin
i:=stp-1;
while que[i]=bestque[i] do dec(i);
if que[i]>bestque[i] then bestque:=que;
end;
exit;
end;
if (stp>=best【-1】{这个是AC与WA唯一不同})or(que[stp]>n)or(getmin[que[stp]]<stp) then exit;
getmin[que[stp]]:=stp;
for i:=stp downto 1 do
for j:=i downto 1 do
if (que[i]+que[j]>que[stp]) then begin
que[stp+1]:=que[i]+que[j];
dfs(stp+1);
end else break;
end;
begin
readln(n);
fillchar(getmin,sizeof(getmin),$3f);
que[1]:=1; best:=maxint; getmin[1]:=1;
dfs(1);
writeln(best-1);
for t:=1 to best-1 do write(bestque[t],' ');
writeln(bestque[best]);
end.