动态求解方案数量

本文详细解析了求解从棋盘左下角到右上角路径数量的算法,通过动态规划的方法,利用二维数组存储中间结果,避免重复计算,提高了算法效率。适用于N*M大小的棋盘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给出一个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

转载于:https://www.cnblogs.com/NYNU-ACM/p/4236810.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值