zoukankan      html  css  js  c++  java
  • 排列组合问题总结

    排列组合

    根本思想还是组合数学的加法原则,将一个状态分成几个不相交的状态,然后用加法原则加起来即可

    1.球同,盒不同,无空箱

    如果:n>=m C(n1,m1)C(n-1,m-1)

    否则 n<m 00

    分析 :

    使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙即可。

    2.球同,盒不同,允许空箱

    C(n+m1,m1)C(n+m-1,m-1)

    我们在第1类情况下继续讨论,我们可以先假设m个盒子里都放好了1个球,所以说白了就是,现在有m+n个相同的球,要放入m个不同的箱子,没有空箱。也就是第1种情况

    3.球不同,盒相同,无空箱

    第二类斯特林数dp[n][m]

    dp[n][m]表示n个球 m个盒子的方法数

    分两种状态

    1.第n个球单独在一个盒子里 有dp[n-1][m-1]

    2.第n个球不单独在一个盒子里 有m*dp[n-1][m]

    dp[n][m]=mdp[n1][m]+dp[n1][m1]dp[n][m]=m * dp[n-1][m]+dp[n-1][m-1]

    边界条件:

    dp[k][k]=1, k>=0

    dp[k][0]=0,k>=1

    0,n<m

    4.球不同,盒相同,允许空箱

    枚举使用箱子的个数即可 此时的dp[n][m]是情况三的第二类的斯特林数

    ans=i=0mdp[n][i]ans=sum_{i=0}^m dp[n][i]

    5.球不同,盒不同,无空箱

    ans=dp[n][m]m!ans=dp[n][m]*m!

    因为球是不同的,所以dp[n][m]得到的盒子相同的情况,只要再给盒子定义顺序,就等于现在的答案了

    6.球不同,盒不同,允许空箱

    power(m,n) 表示m的n次方

    每个球都有m种选择,所以就等于m^n

    7.球同,盒同,允许空箱

    n个球m个盒子,分两种情况

    dp[n][m]代表n个球m个盒子允许空箱的个数

    两种状态

    1.每个盒子至少有一个球 有dp[n-m][m]种情况

    2.至少有一个盒子没有球 有dp[n][m-1]种情况

    n-m>=0:

    dp[n][m]=dp[n][m1]+dp[nm][m]dp[n][m]=dp[n][m-1]+dp[n-m][m]

    n<m:

    dp[n][m]=dp[n][m1]dp[n][m]=dp[n][m-1]

    8.球同,盒同,无空箱

    dp[n-m][m],dp同第7种情况,n>=m 0, n<m

    因为要求无空箱,我们先在每个箱子里面放1个球,然后还剩下n-m个球了,再根据情况7答案就出来了

  • 相关阅读:
    【JAVA】java 堆溢出分析
    【数据结构】链表的基本学习 实现
    【其他】博客园自定义样式指南
    【JAVA】一些好用的开源java类库
    【Shell】Shell 常用命令
    【Spring】Spring Boot 要点整理
    【数据库】Mysql 连接相关
    【Linux】Shell 参数解析
    Erlang 中类型转换
    erlang 中 maps 练习
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/10427276.html
Copyright © 2011-2022 走看看