动态求解方案数量
题意:给出一个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