【总结】动态规划 or 组合数学解决棋盘(迷宫)路径问题(持续更新中)

组合数C(n,m)=C(n-1,m)+C(n-1,m-1) 即对于第n个,不选和选

组合数代码实现:(n>20时)

(方法2的证明,拍的歪了emmm)

//方法1:O(n^2)
    int ans[maxn][maxn];
    int n=5,m=3;
    for(int i=1;i<=5;i++)
       ans[i][i]=ans[i][0]=1;//i个里面选i个和i个里面选0个
    for(int i=2;i<=n;i++)
        for(int j=1;j<=i/2;j++)
        {
            ans[i][j]=ans[i-1][j]+ans[i-1][j-1];
            ans[i][i-j]=ans[i][j];//避免再重复计算,直接赋值
        }
    cout<<ans[5][3]<<endl;
//方法2:O(m)
    long long res=1;
    for(int i=1;i<=m;i++)
        res=res*(n-m+i)/i;
    cout<<res<<endl;
//两个输出结果都是10
  • n*m大小的棋盘,每次都只能向下或者向右走一步,求从左上角到右下角共有多少条路

dp方法: dp[i][j]=dp[i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值