动态求解方案数量

题意:给出一个N*M的棋盘,要求出从棋盘的左下角到棋盘的右上角有多少条路径;


如图所示:如果到达左边缘或下边缘线上的点,只有沿着一个方向一直往前走,方案都只存在一种。从坐标点(1,1)开始,该点存在的到达方案数为到达坐标(0,1)和(1,0)的方案数之和,如图中箭头所示。而已知到达坐标(0,1)和(1,0)的方案数都为1种,所以到达坐标点(1,1)的方案数为2。同理,到达坐标点(1,2)的方案为(0,2)和(1,1)之和……

#include<stdio.h>

int main()  {
    
long long dp[50][50] ;
   
for(int j=1;j<32;j++)
   
    dp[0][j]=1;
   
for(int i=1;i<32;i++)
  
    dp[i][0]=1;
 
for(int i=1;i<32;i++)
    
    for(int j=1;j<32;j++)
  
         dp[i][j]=dp[i-1][j]+dp[i][j-1];
 
    int n , m ;
   
 while(scanf("%d%d",&m,&n)){
   
     if(m==0&&n==0)
      
         return 0 ;
      
     printf("%lld\n",dp[m][n]) ;
 
     }
   
return 0 ;

}
        
最后数值比较大,需要使用 long long  数据类型 或 __int64


posted @ 2014-09-28 19:50  NYNU_ACM  阅读(235)  评论(0编辑  收藏  举报