0-1背包之动态规划(附演示动画)

0-1背包之C语言

01背包问题应该算是一个很经典的问题了,接下来实现一下

问题:
现给出一个容量为V的背包和N件物品,每件物品的体积为v[i],价值为c[i],将几件物品装入背包内,使得物品总体积不超过背包体积,并且使总价值最大,求这个最大值?
给出一组数据:
V = 8,N = 4;
i 1 2 3 4
v 2 3 4 5
c 3 4 5 6

解题思路:
f[i][j] 表示前 i 种物品,背包容量为 j 时的最大价值
首先初始化数组 f[][]
当 i=1 时,如果背包可以放下第一个物品,则放入,更新最大价值
基于第一行的结果和背包容量,可以选择选或者不选第二件,取最大价值

不断更新,直到最后一个值的时候就知道最大价值了
看下面的图:
f[i][j] 表示前 i 种物品,背包容量为 j 时的最大价值
这样就可以明显的看出来了

状态转移方程

f[i][j] = max(f[i-1][j],f[i-1][j-v[i]] + c[i])

在这里插入图片描述
代码部分

#include <stdio.h>
#include <stdlib.h>
#define maxn 10
#define maxv 10

int max(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值