码迷,mamicode.com
首页 > 其他好文 > 详细

0-1背包(动态规划)

时间:2020-07-30 22:16:49      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:lazy   就是   图片   com   png   cap   结果   loading   aci   

1、题目描述:

   有 n 件物品和一个最大承重为 W 的背包,每件物品的重量是 ??i、价值是 ??i

  • 在保证总重量不超过 W 的前提下,选择某些物品装入背包,背包的最大总价值是多少?

注意:每个物品只有 1 件,也就是每个物品只能选择 0 件或者 1件。

  • 假设 values 是价值数组,weights 是重量数组
  • 编号为 k 的物品,价值是 values[k],重量是 weights[k],k ∈ [0, n)

2、思路:

(1)定义状态:假设 dp(i, j) 是 最大承重为 j、有前 i 件物品可选 时的最大总价值,i ∈ [1, n],j ∈ [1, W]

(2)状态转移方程:

?如果 j < weights[i – 1],那么 dp(i, j) = dp(i – 1, j)

?如果 j ≥ weights[i – 1],那么 dp(i, j) = max { dp(i – 1, j), dp(i – 1, j – weights[i – 1]) + values[i – 1] } 

(3)初始值:

?dp(i, 0)、dp(0, j) 初始值均为 0

(4)最终结果:

dp[values.length][capacity]

技术图片

3、代码:

 

0-1背包(动态规划)

标签:lazy   就是   图片   com   png   cap   结果   loading   aci   

原文地址:https://www.cnblogs.com/guoyu1/p/13406068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!