标签:
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9447 Accepted Submission(s): 4879
1 /* 2 原来不经过对角线是路径不穿过对角线的意思啊。递推打表,可以把棋盘下半部分遮住只看上半部分级列数大于等于行数的部分,这样每一个点(x,y)可以由(x-1,y),(x,y-1)推得 3 最后得到一半棋盘的结果再乘2。 4 */ 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 using namespace std; 9 long long a[40][40]; 10 void init() 11 { 12 memset(a,0,sizeof(a)); 13 for(int i=1;i<37;i++) 14 a[i][0]=1; 15 for(int i=1;i<37;i++) 16 { 17 for(int j=1;j<=i;j++) 18 { 19 a[i][j]=a[i-1][j]+a[i][j-1]; 20 } 21 } 22 } 23 int main() 24 { 25 int t=0,n; 26 init(); 27 while(scanf("%d",&n)&&n!=-1) 28 { 29 t++; 30 printf("%d %d %lld\n",t,n,a[n][n]*2); 31 } 32 return 0; 33 }
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3935 Accepted Submission(s): 2074
1 //见鬼了,这两道题的递推公式竟然一样。本来这道题想用dfs来搜但超时,然后发现数据结果竟和上一道题一样。可以这样想, 2 //设行H用列代表,D用行代表,列数要永远大于行数,这样又转换成了一个上三角的半个方格阵,求从求从起点到目标点的路径数。 3 #include<iostream> 4 #include<cstdio> 5 using namespace std; 6 int n,m; 7 long long a[21][21]; 8 void init() 9 { 10 for(int i=1;i<=20;i++) 11 a[i][0]=1; 12 for(int i=1;i<=20;i++) 13 { 14 for(int j=1;j<=i;j++) 15 { 16 a[i][j]=a[i-1][j]+a[i][j-1]; 17 } 18 } 19 } 20 int main() 21 { 22 init(); 23 while(scanf("%d%d",&n,&m)!=EOF) 24 { 25 printf("%lld\n",a[n][m]); 26 } 27 return 0; 28 }
标签:
原文地址:http://www.cnblogs.com/--ZHIYUAN/p/5971367.html