我是靠谱客的博主 尊敬楼房,最近开发中收集的这篇文章主要介绍多重集组合数(动态规划),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
在这里插入图片描述
还是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]

最后

以上就是尊敬楼房为你收集整理的多重集组合数(动态规划)的全部内容,希望文章能够帮你解决多重集组合数(动态规划)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部