nefu 20 穿过街道

n一个城市的街道布局如下:从最左下方走到最右上方,每次只能往上或往右走,一共有多少种走法?

对于图中任意的一个点(i,j),只能由(i-1,j)和(i,j-1)走过来,所以(i,j)点的方法数=(i-1,j)+(i,j-1)的方法数;

(0,0)点到(0,n)的方法数都为1;

(0,0)点到(n,0)的方法数也都为1;

//递归的代码:
int f[100][100];
int getf(int x,int y)
{
    if (f[x][y]!=-1) return f[x][y];
    int result;
    if (x==0||y==0)
    result=1;
    else
    result=getf(x-1,y)+getf(x,y-1);
    f[x][y]=result;
    return result;
}
 
int main(int argc, char *argv[])
{
 int i,j,n;
 memset(f,-1,sizeof(f));
 while(cin>>n)
 {
 if (n==0) break;            
   cout<<getf(n,n)<<endl;           
  }
 //system("PAUSE");
    return EXIT_SUCCESS;
}
 
----------递推的代码------------------------------
int n;
    long long data[21][21];
    for(int i=0;i<=20;i++)
       {
        data[i][0]=1;// 处理边界
        data[0][i]=1;// 处理边界
       }
    for(int j=1;j<=20;j++)
       for(int k=1;k<=20;k++)
           data[j][k]=data[j-1][k]+data[j][k-1];//公式
       while(cin>>n&&n)
       cout<<data[n][n]<<endl;
 
posted @ 2012-10-12 08:45  兴安黑熊  阅读(189)  评论(0编辑  收藏  举报