热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

排列组合n个球放入m个盒子m问题总结(转)

原文链接:http:blog.csdn.netqwb492859377articledetails50654627求,盒子都可以分成是否不能区分&#x

原文链接:http://blog.csdn.net/qwb492859377/article/details/50654627

求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论。

 

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

C(n-1,m-1), n>=m
0, n

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

 

 

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

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

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

 

 

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

第二类斯特林数dp[n][m]
dp[n][m]&#61;m*dp[n-1][m]&#43;dp[n-1][m-1],1<&#61;m dp[k][k]&#61;1,k>&#61;0
dp[k][0]&#61;0,k>&#61;1
0,n

这种情况就是第二类斯特林数&#xff0c;我们来理解一下这个转移方程。

对于第n个球&#xff0c;如果前面的n-1个球已经放在了m个箱子里&#xff0c;那么现在第n个球放在哪个箱子都是可以的&#xff0c;所以m*dp[n-1][m];

如果前n-1个球已经放在了m-1个箱子里&#xff0c;那么现在第n个球必须要新开一个箱子来存放&#xff0c;所以dp[n-1][m-1]

其他的都没法转移过来

 

 

 

4.球不同&#xff0c;盒相同&#xff0c;允许空箱

sigma dp[n][i],0<&#61;i<&#61;m,dp[n][m]为情况3的第二类斯特林数

这种情况就是在第3种情况的前提下&#xff0c;去枚举使用的箱子的个数

 

 

 

5.球不同&#xff0c;盒不同&#xff0c;无空箱

dp[n][m]*fact[m],dp[n][m]为情况3的第二类斯特林数,fact[m]为m的阶乘

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

 

 

6.球不同&#xff0c;盒不同&#xff0c;允许空箱

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

每个球都有m种选择&#xff0c;所以就等于m^n

 

 

7.球同&#xff0c;盒同&#xff0c;允许空箱

dp[n][m]&#61;dp[n][m-1]&#43;dp[n-m][m], n>&#61;m
dp[n][m]&#61;dp[n][m-1], n 边界dp[k][1]&#61;1,dp[1][k]&#61;1,dp[0][k]&#61;1

现在有n个球&#xff0c;和m个箱子&#xff0c;我可以选择在所有箱子里面都放上1个球&#xff0c;也可以不选择这个操作。

如果选择了这个操作&#xff0c;那么就从dp[n-m][m]转移过来

如果没有选择这个操作&#xff0c;那么就从dp[n][m-1]转移过来

 

 

 

8.球同&#xff0c;盒同&#xff0c;无空箱

dp[n-m][m],dp同第7种情况,n>&#61;m
0, n

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

 

如果有错误&#xff0c;希望菊苣指出~

转载请注明出处...


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
author-avatar
merlion-p
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有