Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1133

我的代码
 1 #include <stdio.h>
2 #include <string.h>
3
4 const int N=101,base=10000000;
5 int f[N][N][N];
6 void plus(int *a,int *b)
7 {
8 int i;
9 if (b[0]>a[0]) a[0]=b[0];
10 for (i=1;i<=a[0];i++)
11 {
12 a[i]+=b[i];
13 if (a[i]>=base)
14 {
15 a[i]-=base;
16 a[i+1]++;
17 }
18 if (a[a[0]+1]>0) a[0]++;
19 }
20 }
21 void mult(int *a,int b)
22 {
23 int i;
24 a[1]*=b;
25 for (i=2;i<=a[0];i++)
26 {
27 a[i]=a[i]*b+a[i-1]/base;
28 a[i-1]%=base;
29 }
30 while (a[a[0]]>=base)
31 {
32 a[0]++;
33 a[a[0]]=a[a[0]-1]/base;
34 a[a[0]-1]%=base;
35 }
36 }
37 void printbn(int *a)
38 {
39 int i;
40 printf("%d",a[a[0]]);
41 for (i=a[0]-1;i>0;i--) printf("%07d",a[i]);
42 printf("\n");
43 }
44 int main()
45 {
46 int i,j,k;
47 memset(f,0,sizeof(f));
48 for (i=1;i<N;i++) f[i][0][0]=f[i][0][1]=1;
49 for (i=1;i<N;i++)
50 for (j=1;j<=i;j++)
51 {
52 plus(f[i][j],f[i-1][j]);
53 plus(f[i][j],f[i][j-1]);
54 }
55 for (i=0;i<N;i++)
56 for (j=0;j<=i;j++)
57 {
58 for (k=1;k<=i;k++) mult(f[i][j],k);
59 for (k=1;k<=j;k++) mult(f[i][j],k);
60 }
61 int c=0,n,m;
62 while (scanf("%d%d",&n,&m) && (n||m))
63 {
64 printf("Test #%d:\n",++c);
65 printbn(f[n][m]);
66 }
67 return 0;
68 }

 

posted on 2011-12-03 16:00  Qiuqiqiu  阅读(326)  评论(0编辑  收藏  举报