棋盘 | ||||||
| ||||||
Description | ||||||
现有一棋盘,左上角为起点坐标为(1,1),右下角为终点坐标为(n,n),现在我们规定棋盘的对角线(1,1),(2,2)....(n,n)上除了起点和终点之外都不能通过,求出从起点到终点的路径数有多少个? | ||||||
Input | ||||||
多组测试数据处理到文件结束,每行包含一个整数n(2<=n<=35)。 | ||||||
Output | ||||||
输出路径数. | ||||||
Sample Input | ||||||
2 6
| ||||||
Sample Output | ||||||
2 28
| ||||||
Hint | ||||||
只能向右或向下走 | ||||||
Source | ||||||
2014 Winter Holiday Contest 3 |
#include<stdio.h>
#include<string.h>
using namespace std;
long long int dp[40][40];
int main()
{
int t;
while(~scanf("%d",&t))
{
memset(dp,0,sizeof(dp));
for(int i=2;i<=t;i++)
{
dp[1][i]=1;
}
for(int i=2;i<=t;i++)
{
dp[i][1]=1;
}
/*for(int i=1;i<=t;i++)
{
for(int j=1;j<=t;j++)
{
printf("%d ",dp[i][j]);
}
printf("\n");
}*/
for(int i=2;i<=t;i++)
{
for(int j=2;j<=t;j++)
{
if(i==j&&i!=t)continue;
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
/* for(int i=1;i<=t;i++)
{
for(int j=1;j<=t;j++)
{
printf("%d ",dp[i][j]);
}
printf("\n");
}*/
printf("%lld\n",dp[t][t]);
}
}