题目描述:
给你m个东西,放在n个相同的盒子中(相同,即不计顺序),每个盒子可以放任意多,问有多少种放法。
这是组合数学母函数的典型应用。
解题报告:
整数划分问题。
dp[i][j] 表示 j 个东西放 i 个盒子中的方法数。则 i 个盒子的状态只有 2 种:有空的,和没有空的。
即dp[i][j] = 有空的 + 没有空的。
情况1:j < i
没有空的方法数为 0,有空的时,把一个盒子单独拿出来当做空的,剩下的任意放就是 dp[i - 1][j]
综上,dp[i][j] = dp[i - 1][j] + 0
情况2:j == i
没有空的时,有且仅有一种情况。
有空的时,方法同上,单独取出一个,方法数:dp[i - 1][j]
综上 dp[i][j] = dp[i - 1][j] + 1
情况3:j > i
没有空的时,可以从j 中拿出 i 个依次放到 i 个盒子中,剩下的随便放即可,方法数 dp[i][j - i]
有空的时,同上,dp[i - 1][j]
综上 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
本文探讨了整数划分问题的一种动态规划解决方案。通过分析不同情况下物品放入盒子的方法数量,利用递推公式实现了问题的有效求解。
,每个盒子可以放任意多,问有多少种放法&spm=1001.2101.3001.5002&articleId=6462203&d=1&t=3&u=30ded45e964948138e0674ab22c8813d)
3万+

被折叠的 条评论
为什么被折叠?



