1 3 12 -1
1 1 2 2 3 10 3 12 416024解题思路:假设小兔的棋盘是 8 × 8 的 ( 当然你也可以假设是其他 )。如下图:
箭头方向表示从该格子下一步能去的格子。因为不能穿越对角线,所有对角线上的格子只有进去的箭头,没有出来的箭头。
观察上图你就可以发现,其实这是一张关于对角线对称的图。所有我们只要求一个方向的值,然后乘以2即可。
我们就拿下三角来考虑。不难发现,所有在0列上的格子,路径数都是 1 (只能从上面过来)。
而其他格子则都是由上、左两个方向过来,即:f(i, j) = f(i - 1, j) + f(i, j - 1); 另外f(i, i) = f(i, j - 1) 或者 f(i, i) = f( i-1, j ) ;源代码:#include <stdio.h> #include <stdlib.h>__int64 dp[40][40]; void init() { int i,j; for(i=1;i<40;i++) dp[1][i]=1; //边界 for(i=2;i<40;i++) { dp[i][i]=dp[i-1][i];//对角线 for(j=i+1;j<40;j++) dp[i][j]=dp[i-1][j]+dp[i][j-1]; } } int main() { int i,n,t=1; init(); while(scanf("%d",&n)!=EOF && (n!=-1)) { printf("%d %d %I64d\n",t++,n,2*dp[n+1][n+1]); } system("pause"); return 0; }
原文地址:http://blog.csdn.net/zchlww/article/details/41828273