f:array[0..21,0..21,0..21] of longint;
function w(a,b,c:longint):longint;
begin
if (a<=0)or(b<=0)or(c<=0) then
begin
w:=1;
exit;
end;
if (a>20)or(b>20)or(c>20) then
begin
w:=w(20,20,20);
exit;
end;
if f[a,b,c]<>0 then
begin
w:=f[a,b,c];
exit;
end;
if (a<b)and(b<c) then
begin
w:=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
f[a,b,c]:=w;
end
else
begin
w:=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
f[a,b,c]:=w;
end;
end;
procedure main;
var a,b,c:longint;
begin
readln(a,b,c);
while (a<>-1)and(b<>-1)and(c<>-1) do
begin
writeln('w(',a,', ',b,', ',c,') = ',w(a,b,c));
readln(a,b,c);
end;
end;
begin
assign(input,'254.in');reset(input);
assign(output,'254.out');rewrite(output);
main;
close(input);close(output);
end.
改了10+次
硬是没过 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!