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 |
你第一组数据就不对,不知道你怎么测试的In Reply To:my code here: Posted by:gogo_ccnu at 2004-09-23 11:16:00 > //--------------------------------------------------------------------------- > /*--------------------------------------------------------- > > Problem: A decorative fence > Author: gogo@ccnu > Algorithm: DP > Complexity: 0(n^2) > > some tips: > 1.up(N,N) = down(N,1) = 0; > 2.up(N,i) = down(N,N+1-i); > 3.down(N,i) = down(N,i-1) + up(N-1,i-1); > > ---------------------------------------------------------*/ > #include <stdio.h> > > long long T,N; > long long C; > long long a[21]; > long long up[21][21]; > long long down[21][21]; > > void print(); > void init() > { > up[1][1] = 1; > for(long long i=2;i<=20;i++) > { long long j; > for(j=2;j<=i;j++) > down[i][j] = down[i][j-1] + up[i-1][j-1]; > > for(j=1;j<i;j++) > up[i][j] = down[i][i+1-j]; > > // print(); > } > } > > void go_up(long long n,long long c,long long lmt); > void go_down(long long n,long long c,long long lmt) > { > if(n==1) {printf(" %d",a[n]);return;} > > for(long long i=lmt;i<=n;i++) > { > c -= down[n][i]; > if(c<1) > { > printf(" %d",a[i]); > for(long long j=i;j<=n;j++) a[j] = a[j+1]; > go_up(n-1,c+down[n][i],i-1); > break; > } > } > } > void go_up(long long n,long long c,long long lmt) > { > if(n==1) {printf(" %d",a[n]);return;} > > for(int i=1;i<=lmt;i++) > { > c -= up[n][i]; > if(c<1) > { > printf(" %d",a[i]); > for(int j=i;j<=n;j++) a[j] = a[j+1]; > go_down(n-1,c+up[n][i],i); > break; > } > } > } > void solve(long long n,long long c) > { > if(n==1) printf("%d",a[n]); > > for(long long i=2;i<=n;i++) > { > c -= up[n][i-1]; > if(c<1) > { > printf("%d",a[i-1]); > for(int j=i-1;j<n;j++) a[j] = a[j+1]; > go_down(n-1,c+up[n][i-1],i-1); > break; > } > > c -= down[n][i]; > if(c<1) > { > printf("%d",a[i]); > for(int j=i;j<n;j++) a[j] = a[j+1]; > go_up(n-1,c+down[n][i],i); > break; > } > } > } > > int main() > { > // freopen("in.txt","r",stdin); > // freopen("out.txt","w",stdout); > init(); > scanf("%Ld",&T); > > while(T--) > { > scanf("%Ld%Ld",&N,&C); > for(long long i=1;i<=20;i++) a[i] = i; > solve(N,C); > printf("%c",13); > printf("\n"); > } > return 1; > } > > void print() > { > int u,v; > for(u=1;u<=6;u++) > { for(v=1;v<=6;v++) > { printf("%4d ",up[v][u]); > > } printf("\n"); > } > printf("\n"); > for(u=1;u<=6;u++) > { for(v=1;v<=6;v++) > { printf("%4d ",down[v][u]); > > } printf("\n"); > } > printf("------------------\n"); > } > //--------------------------------------------------------------------------- Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator