数的划分&传球游戏
数的划分&传球游戏
数的划分
一直以为是用第二类斯特林数
然后发现样例都过不了
然后反复对比第二类斯特林数的应用条件和题干
终于发现,第二类斯特林数的递推式的使用条件是“不同的球”,
而在这题和洛谷P2386 放苹果中,是“相同的”数字1和苹果
所以不能用第二类斯特林数去做
去洛谷一搜,好家伙我居然切过(虽然当时拿的深搜
正解的做法是,
设\(f(i,j)\)表示整数\(i\)分成\(j\)份的方案数
- 如果\(i \lt j\),则\(f(i,j)=0\):因为“每份不能为空”,所以不行
- 如果\(i=j\),则\(f(i,j)=1\):每份都是1
- 如果\(i \gt j\),则有两种情况:\(j\)份中有没有\(1\)
- \(j\)份中有至少一项为1:问题转化将\(i-1\)分成\(j-1\)份(即第\(j\)份为1)
- \(j\)份中没有1:为了使式子转化为第1种情况(即含至少一项为1),就每一份减1,即将\(i-j\)分成\(j\)份
- 因此递推式为\(f(i,j)=f(i-1,j-1)+f(i-j,j)\)
传球游戏
题没什么主要是书上给的核心代码有点诡异没看懂
拿样例输入(3,3)举例
下表的第\(i\)行第\(j\)列代表球传\(i\)次后传到第\(j\)个人手里的方案数
那么可以得到(即传0次球后球只有一种方案到达第1个人手里,无法到达其他人手里)
1 | 0 | 0 |
---|---|---|
每个人第\(i\)次拿到球一定是从左面的人或右面的人手里拿的
因此每一行的每一项都等于这一格的左上的方案数加上右上的方案数
(即上一步左边的人拿到球的方案数+上一步右边人拿到球的方案数)
1 | 0 | 0 |
---|---|---|
0 | 1 | 1 |
1 | 0 | 0 |
---|---|---|
0 | 1 | 1 |
2 | 1 | 1 |
2 | 3 | 3 |
显然要求的结果在第\(m\)行第1列上