Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求助!自己做了很多数据貌似都没有问题,可就是re.代码如下,请帮帮忙,感激不尽!! program gjk; var up,down:array[1..20,0..20]of int64; n,t:longint; c:int64; ans,rank:array[1..20]of longint; procedure dp; var i,j:longint; begin fillchar(up,sizeof(up),0); fillchar(down,sizeof(down),0); down[1,1]:=1; up[1,1]:=1; for i:=2 to 20 do for j:=1 to i do begin down[i,j]:=down[i,j-1]+up[i-1,j-1]; up[i,i+1-j]:=down[i,j]; end; end; procedure get_a1; var k:longint; sum:int64; begin k:=1; sum:=0; while sum+up[n,k]+down[n,k]<c do begin sum:=sum+up[n,k]+down[n,k]; inc(k); end; ans[1]:=k; rank[1]:=k; c:=c-sum; end; procedure get_a2; var k:longint; sum:int64; begin k:=1; sum:=0; while (k<ans[1])and(sum+up[n-1,k]<c) do begin sum:=sum+up[n-1,k]; inc(k); end; if k<ans[1] then begin ans[2]:=k; rank[2]:=k; c:=c-sum; exit; end; k:=ans[1]; while sum+down[n-1,k]<c do begin sum:=sum+down[n-1,k]; inc(k); end; ans[2]:=k+1; rank[2]:=k; c:=c-sum; end; procedure solve; var i,j,k:longint; sum:int64; begin get_a1; get_a2; for i:=3 to n do begin if ans[i-1]>ans[i-2] then begin k:=1; sum:=0; while sum+up[n+1-i,k]<c do begin sum:=sum+up[n+1-i,k]; inc(k); end; rank[i]:=k; for j:=i-1 downto 1 do if k>=rank[j] then inc(k); ans[i]:=k; c:=c-sum; end else begin k:=rank[i-1]; sum:=0; while sum+down[n+1-i,k]<c do begin sum:=sum+down[n+1-i,k]; inc(k); end; rank[i]:=k; for j:=i-1 downto 1 do if k>=rank[j] then inc(k); ans[i]:=k; c:=c-sum; end; end; for i:=1 to n-1 do write(ans[i],' '); writeln(ans[n]); end; begin dp; readln(t); while t>0 do begin readln(n,c); solve; dec(t); end; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator