algorithm - 01 有m个物品限制的背包问题
问题描述
有一个容量为C的背包,有n个项目可供选择,每个项目只有一个,并且它们的大小和值分别是ci和vi(i=1,2,...,n),如何选择物品从物品中最多装载m个物品的条件下,使背包中的总价值最大化?谁能告诉我这个问题的具体思路,或者有什么代码可以看的吗?THS
解决方案
您应该定义以下函数 f(i,j,k),它可以通过从最大容量为 j 的前 i 个项目 (1,2..i) 中精确选择 k 个项目来为您提供可以得到的最大值。
根据我们的定义,转换将是:
f(i , j , k) = max( t1 , t2 )
t1 = f(i-i , j , k) // here we did not pick the i-th item
t2 = vi + f(i-1 , j - ci , k-1)// here we picked the i-th item
您的问题的结果将是 max( f(n,C,i) ) 其中 i=1,2...n
推荐阅读
- typescript - 缩小回调参数类型
- python - IPython(jupyter)中的完成现在可以工作(意外的关键字参数'column')
- python - 如何使用python从csv文件中提取最小值或最大值出现的年份
- javascript - 如何告诉 Javascript getElementByClassName 获取 ul 的所有元素,而不是在每个 li 中重复类名?
- python - 使用python的re从字符串中删除URL
- ssl - traefik ssl 证书背后的代理
- c++ - 在 C++ 中以多态类型存储的 RTTI 信息、vtables 等的正式名称是什么?
- android - 有更新时通知
- c# - 复选框总是显示 False 或者它是 True
- python - 用于列表分解的优雅 Python 代码