

还是dp

然后我们需要对dp[i+1][j]进行拆分几种情况:
1.不选第i种,也就是第i种物品选0个,那么显然这时候就是dp[i][j]
2.选第i种,这时候假设我们可以选无限个,那么第i种可以选1,2,…,假如这时候对第i种选取的个数减1,那么它就可以从0一直选到正无穷,同时j个物品也将变成j-1个,这时候对应的就是dp[i+1][j-i]
3.选第i种,但是第i种最多只能选ai个,那么我们在第二步减1后会发现,我们是选不到ai的(最多选到ai-1),这时候第i种对应选ai个的情况,就相当于前i-1个选j-1-ai个的情况,因此是dp[i-1][j-1-ai]
因此,最终式子为:

确实很难!
代码:

补充边界条件和遍历时的越界判断得到最终的dp[n][m]
最后
以上就是尊敬楼房最近收集整理的关于多重集组合数(动态规划)的全部内容,更多相关多重集组合数(动态规划)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复