{
rqnoj.38.count;
}
program count;
var
a:array[1..3]of longint;
n,all:longint;
procedure dfs(p:longint);
begin
if p>3*n then inc(all)
else begin
if (a[1]<n) then begin inc(a[1]); dfs(p+1); dec(a[1]); end;
if (a[2]<n)and(a[1]>a[2]) then begin inc(a[2]); dfs(p+1); dec(a[2]); end;
if (a[3]<n)and(a[2]>a[3]) then begin inc(a[3]); dfs(p+1); dec(a[3]); end;
end;
end;
begin
readln(n);
all:=0;
dfs(1);
writeln(all);
readln;
end.
状态: Unaccepted
测评机: Xeost[5]
得分: 10分
提交日期: 2010-10-1 18:53:00
有效耗时: 156毫秒
测试结果1: 通过本测试点|有效耗时156ms
测试结果2: 选手程序运行超过时限
测试结果3: 输出过少|用户输出数据少于标准输出的50%[标准输出69位|选手输出1位]
测试结果4: 输出过少|用户输出数据少于标准输出的50%[标准输出71位|选手输出1位]
测试结果5: 输出过少|用户输出数据少于标准输出的50%[标准输出72位|选手输出1位]
测试结果6: 输出过少|用户输出数据少于标准输出的50%[标准输出73位|选手输出1位]
测试结果7: 选手程序运行超过时限
测试结果8: 输出过少|用户输出数据少于标准输出的50%[标准输出76位|选手输出1位]
测试结果9: 输出过少|用户输出数据少于标准输出的50%[标准输出78位|选手输出1位]
测试结果10: 输出过少|用户输出数据少于标准输出的50%[标准输出79位|选手输出1位]
得要用高精的吧
type
arr=array[0..100] of integer;
var
n,i,j,k,max:longint;
f:array[0..180,0..60,0..60] of arr;
function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end;
procedure jia(i,j,k,i2,j2,k2:longint);
var
p,q,x,max:longint;
c:array[1..100] of integer;
begin
fillchar(c,sizeof(c),0);
if f[i,j,k][0]>f[i2,j2,k2][0] then max:=f[i,j,k][0] else
max:=f[i2,j2,k2][0];
x:=0;
for p:=1 to max do
begin
c[p]:=f[i,j,k][p]+f[i2,j2,k2][p]+x;
x:=c[p] div 10;
c[p]:=c[p] mod 10;
end;
if x>0 then
begin f[i,j,k][0]:=max+1; c[max+1]:=x; end else f[i,j,k][0]:=max;
for p:=1 to f[i,j,k][0] do
f[i,j,k][p]:=c[p];
end;
begin
readln(n);
f[1,1,0][0]:=1;
f[1,1,0][1]:=1;
for i:=1 to 3*n do
for j:=1 to min(i,n) do
for k:=0 to j do
if k>=i-j-k then
begin
if (k>=i-1-j-k) and (i-1>=j) then
jia(i,j,k,i-1,j,k);
if (j-1>=k) and (k>=i-j-k) then
jia(i,j,k,i-1,j-1,k);
if (i-1>=j) and (k-1>=i-j-k) then
jia(i,j,k,i-1,j,k-1);
end;
for i:=f[3*n,n,n][0] downto 1 do write(f[3*n,n,n][i]);
end.
附上一个我AC的程序