HDU 2067 小兔的棋盘 动态规划

解题报告:

题目大意:在一个棋盘上,从坐标为(1,1)的点走到坐标为(n,n)的点并且不经过这两点之间的对角线,问一共有多少种走法。

定义一个二维数组map[40][40],点map[i][j]的值为从(1,1)点走到这个点有多少种走法,而点(i,j) 可以由坐标为(i-1,j)和坐标为(i,j-1)这两个点走过来,所以走到(i,j)点的走法就有map[i-1][j]+map[i][j-1]种。另外要注意的是数据要用__int64,而且要初始化。

 1 #include<cstdio>
 2 #include<cstring>
 3 __int64 map[40][40];
 4 int main() {
 5     int n,l=1;
 6     memset(map,0,sizeof(map));
 7     map[1][1]=1,map[2][1]=1,map[2][2]=1;
 8     for(int i=3;i<=36;++i)
 9     for(int j=1;j<=i;++j)
10     map[i][j]=map[i-1][j]+map[i][j-1];
11     while(scanf("%d",&n)&&n!=-1)
12     printf("%d %d %I64d\n",l++,n,2*map[n+1][n+1]);
13     return 0;
14 }
View Code

 

posted @ 2013-05-31 20:54  xiaxiaosheng  阅读(211)  评论(0编辑  收藏  举报