网格(1,1)到(x,y) 加法、乘法、排列组合原理

前言: 因为一个小问题卡壳,发现自己对加法、乘法、排列组合的混淆。当然,如果像在学校中做的数学题一样,即已经抽象成了数学语言,我相信大部分人都不会犯错误。而在算法竞赛的过程当中,需要我们自己建模也好抽象也好,在这个过程当中容易出现混淆,所以下面通过解决问题来重新理解一遍这几种原理的内容和区别。

问题:给定一张网格图,你在(1,1),走到(x,y)有多少走法?

思路: 见下图。

首先上图是一种比较原始的做法。而本身这个题目可以这样抽象,即从(1,1)到 (x,y)共需要 (y-1) + (x-1) 步,并且必须向右走 x-1 步,向下走 y-1 步。而只要确定了哪 几步向右走,则剩余的几步则都是向下走,即确定了整体怎么走。所以这种做法就抽象成了组合问题,例如上图中到(4,3)点的走法有10种,即等于 C 5 3 C_5^3 C53,其中5 = 4-1 + 3-1,3 = 4-1。

我的错误在于想当然的将最后的结果用 (y-1)*(x-1) 计算所得,而这就是乘法原理和组合原理的混淆,所以计算不是问题,关键在于分析问题及建立模型。下面给出几种原理的内容,以找出区别。

  • 加法原理: 如果完成事件A有n种方法,完成事件B有m种方法,那么完成两者之一有n+m种方法。

  • 乘法原理: 如果完成事件A有n种方法,完成事件B有m种方法,那么先完成A再完成B有n*m种方法。

  • 排列:

    • 从n个数中有序地选出m个数的方案数是多少?
    • 第一个数有n种取法,第二个数有n-1种取法……第m个数有n-m+1种取法。
    • ∏ i = 0 m − 1 ( n − i ) = n ! ( n − m ) ! \prod_{i=0}^{m-1}{(n-i)}=\frac{n!}{(n-m)!} i=0m1(ni)=(nm)!n!
    • 记为 A n m A_{n}^m Anm
  • 组合:

    • 从n个数中无序地选出m个数的方案数是多少?

    • 先有序地取m个数。

    • 那么无序的m个数会被取到m!次。

    • A n m m ! = n ! m ! ( n − m ) ! \frac{A_{n}^m}{m!} = \frac{n!}{m!(n-m)!} m!Anm=m!(nm)!n!

    • 记为 C n m C_{n}^{m} Cnm --> C n m = C n − 1 m + C n − 1 m − 1 C_{n}^{m} = C_{n-1}^{m} + C_{n-1}^{m-1} Cnm=Cn1m+Cn1m1

      ( PS:从 n 个里面选 m 个,所以对于第 n 个来说其有选与不选两种:

      1. 选择它,则意味着要从 n-1 个当中选择 m-1 个,即 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1

      2. 不选择它,则意味着要从 n-1 个当中选择 m 个,即 C n − 1 m C_{n-1}^{m} Cn1m

        -> 上述这种方法又叫做选择计数法,也是一种常见的递推思想。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drdajie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值