把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法?

提示:如果8个球都放在一个袋子里,无论是放哪个袋子,都只算同一种分法。

解析:

把问题合成,先思索5个袋子都不空的状况,再思索4个袋子不空的状况,以此类推,最后思索只运用一个袋子的状况(这种分法只要1种),把一切子状况的分法数相加求出总分法。

进一步剖析,运用k个袋子装n个球(袋子不空),一共有几种分法的问题能够转化为k个数相加等于n的种数问题。

运用5个袋子装8个球则有3种:

1+1+1+1+4 = 8

1+1+1+2+3 = 8

1+1+2+2+2 = 8

运用4个袋子分8个球则有5种:

1+1+1+5=8

1+1+2+4=8

1+1+3+3=8

1+2+2+3=8

2+2+2+2=8

运用3个袋子分8个球则有5种:

1+1+6=8

1+2+5=8

1+3+4=8

2+2+4=8

2+3+3=8

运用2个袋子分8个球则有4种:

1+7=8

2+6=8

3+5=8

4+4=8

运用1个袋子装8个球则有1种:

8=8

因而,该问题的答案即为一切子状况下的和,3+5+5+4+1 = 18。

扩展局部:

关于将一个整数 N 合成成 K 个不为0的数之和,能够应用递归加动态规划来停止快速运算。

递推公式为:

f(n, k) = f(n-1, k-1) + f(n-k, k)

递归出口为:

f(n, k) = 1, 当 k == 1 或 n == k;(很明显,只要一个袋子,或者袋子数和球数相同时只要一种分法)

f(n, k) = 0, 当 n < k;(球数比袋子数少,则必然存在尚未应用的袋子,无解)

接下来停止剖析:

f(n-1, k-1)怎样了解呢,就是把第 1 个数放成 1,然后把剩下的 n-1 这个数分红 k-1 份。f(n-1, k-1)就是原n,k问题中第一个数是 1 的一切分的办法数;

f(n-k, k) 就是原n,k问题中第一个数不是 1(大于1),能够分的办法数。这是一个关键点。认真剖析,相当于给 k 个位置,每个位置先放一个 1,(相当于每个袋子都有1个球)。接下来剩下的 n-k ,这个数字再往这 k 个位置上分,(相当于把剩下的球分给袋子,仍保证应用一切袋子)这能够保证第一个位置至少比1大(第一个袋子的球数大于1)。

来源:知乎Ron Tang

CSP-J2019 把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法?的更多相关文章

  1. 在n个球中,任意取出m个(不放回),求共有多少种取法

    要求: 在n个球中,任意取出m个(不放回),求共有多少种取法 分析: 假设3个球A,B,C,任意取出2个,可分为取出的球中含A的部分和不含A的部分.即AB,AC为一组,BC为一组. 设函数F(n,m) ...

  2. poj1664放苹果(递归)

    题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  3. CSP-J2019 NOIP普及组初赛真题(选择题部分)

    NOIP初赛考试提纲 时间:10月的第2/3个星期六下午14:30~16:30 分数及形式:满分100分,形式为笔试(今年可能上机) 1.单项选择题,共15题,每题2分,共30分 2.阅读程序题,共3 ...

  4. CSP初赛复习

    初赛复习 初赛一定要过啊,否则付出的那么多都白搭了! while(1) ++csp.rp,++csp.luck,++csp.scores; 历史 2020年开始,除NOIP以外的NOI系列其他赛事(包 ...

  5. CodeForces 148D-Bag of mice(概率dp)

    题意: 袋子里有w个白球b个黑球,现在两个人轮流每次取一个球(不放回),先取到白球的获胜,当后手取走一个球时,袋子里的球会随机的漏掉一个,问先手获胜的概率. 分析: dp[i][j]表示袋子中i个白球 ...

  6. [转]100个经典C语言程序(益智类问题)

    目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事 ...

  7. Tsinsen-A1489 抽奖 【数学期望】

    乔明达太神,其实已经题解非常清楚了,我再推一遍吧. 题目意思相当于有n个盒子,无差别投m次球,每个盒子的得分为每个盒子里的球的个数. 第一问: 假设这个球放在了第i个盒子里,那么 ∆ans = (mi ...

  8. [NOIP2001提高组]数的划分

    题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...

  9. java实现组合问题

    刚才刚更新了排列问题,顺带把组合问题也发表一下 1.问题描述: 已知有m个球,从m个球中取n个球有多少种不同的取法. 2.输入示例: 请输入总球的个数和要取的球的个数 6 5 3.输出示例: 共有6种 ...

随机推荐

  1. # SpringBoot-环境搭建

    SpringBoot-环境搭建 标签(空格分隔): java,SpringBoot 1.创建Maven工程 2.编写pom文件 <parent> <groupId>org.sp ...

  2. lua中单引号和双引号和/的输出的问题

    lua单引号和双引号的问题 lua 中的 单引号 与 双引号 (" " 与 '') Lua除支持双引号("")表示字符串外, 也支持用单引号('') 注意: 如 ...

  3. 谁来教我渗透测试——Windows server 2003上部署动态ASP网站

    安装网站 我们点击开始/管理工具/管理您的服务器 在服务器配置页面点击添加或删除角色 选择应用程序服务器,点击下一步 将两个工具都勾选上,点击下一步 点击下一步进行安装 等待安装 安装完成后点击完成按 ...

  4. gerrit安装指南

    Gerrit的基本介绍 Gerrit 是一个Git服务器,它基于 git 版本控制系统,使用网页界面来进行审阅工作.Gerrit 旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅,更改将上 ...

  5. SeaweedFS在.net core下的实践方案

    一直对分布式的文件储存系统很感兴趣,最开始关注淘宝的TFS(Taobao File System),好像搁浅了,官方地址无法访问,github上面,各种编译问题,无意间发现了SeaweedFS 链接s ...

  6. 属性集 Properties

    5.1 概述 java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集.它使用键值结构存储数据,每个键及其对应值都是一个字符串.该类也被许多Java类使用,比如获 ...

  7. Java基础—控制流程语句(条件语句与循环结构)

    与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程.Java的控制流程结构与C和C++的控制流程机构一样,只有很少的例外情况.没有goto语句,但break语句可以带标签,可以利用它实 ...

  8. spring时遇到的小问题

    最近在学习spring的时候遇到了两个小问题,在此总结一下 1.少导了所需要的包 运行测试程序,报出以下错误. 初步分析,得知是dataSource数据源没有创建成功,以为dataSource配置文件 ...

  9. Elasticsearch第三篇:查询详解

    从第一篇开始,我用的ES版本就是7.8.0的,与低版本略有不同,不同点可以参考官方介绍,最大的不同就是抛弃 type 这一概念,为了方便测试,首先建立一个学生成绩的索引库(在建立的同时,规定字段类型, ...

  10. [持续更新]——关于C++的一些可能会常用的函数

    写在前面 这些函数都是我和朋友一点一点写出来的,可能部分代码会有点雷同,但大部分代码都是自我总结出来的.目前包含的函数功能分别是: 1.设置控制台颜色 2.设置控制台光标位置 3.隐藏控制台光标 4. ...