前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ><dp> 0--1背包问题

<dp> 0--1背包问题

原创
作者头像
大学里的混子
修改2018-11-19 11:20:15
4190
修改2018-11-19 11:20:15
举报
文章被收录于专栏:LeetCodeLeetCode

问题:

有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?

例如:有一个容量为5的背包,有下面三个物品,问怎样才能让背包的放入最多价值的物品。

编号

0

1

2

重量

1

2

3

价值

6

10

12

解题思路:

这是一个动态规划问题,看到这个问题,可能有人会想是否可以采用贪心算法,这样我们举几个例子就知道贪心算法并不正确。

正确思路:

定义:f(n,c)是考虑将n个物品放入容量为c的背包所能获得的最大的价值。

如果不放入第i个物品,那么:

代码语言:javascript
复制
f(i,c)= f(i-1,c)

如果放入第i个物品,那么:

代码语言:javascript
复制
f(i,c) = v(i) + f(i-1,c-w(i))

两种情况取最大的值,那么状态方程为:

代码语言:txt
复制
f(i,c) = Max{f(i-1,c), v(i) + f(i-1,c-w(i))}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档