|
棋盘 | ||||||
| ||||||
|
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]);
}
}

被折叠的 条评论
为什么被折叠?



