博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划一:01背包问题
阅读量:6736 次
发布时间:2019-06-25

本文共 1708 字,大约阅读时间需要 5 分钟。

最近碰到很多有关于动态规划的问题,总结一下:

一、01背包问题(python实现)

例:给定3个物品,背包的容量为50磅

物品1重10磅,价值60;物品2重20磅,价值100;物品3重30磅,价值120

求背包能装下的最大价值

求解表如下

物品    0磅       10磅        20磅        30磅        40磅         50磅

 0     0价值     0价值       0价值       0价值      0价值        0价值

 1      0价值    60价值     60价值      60价值    60价值      60价值

 2     0价值     60价值    100价值    160价值    160价值    160价值

 3     0价值     60价值    100价值    160价值    180价值    220价值

由上表可知最大容量的最大价值是220

代码如下:

1 def weight_goods(n, weight, w, v): 2     #n是物品数 3     #weight是背包容量 4     #w列表是每个物品的体积 5     #v列表是每个物品的价值 6  7     #res1 = [[0 for j in range(weight+1)] for I in range(n+1)]   一步实现 8     #三种物品选入背包的重量对应的价值res[i]是,物品res[i][j]是选入物品的价值,用0初始化二维数组 9     res = []10     for I in range(n+1):11         for j in range(weight+2):12             a = [0]*j13         res.append(a)14     15     #当分别放入0,1,2,3物品的组合时,输出容量为0-50磅的价值16     for I in range(1, n+1):17         for j in range(0, weight+1):18             res[i][j] = res[i-1][j]19     20     #以下是状态转移方程:res[i][j] = max{res[i-1][j-w[i-1]]+v[i-1], res[i][j]}21     if j >= w[i-1] and res[i][j] < res[i-1][j-w[i-1]]+v[i-1]:22         res[i][j] = res[i-1][j-w[i-1]]+v[i-1]23 24     #以上得出背包最大容量下的最大价值是res[n][weight],以下通过排列组合得出所有可能组合的价值值25     #然后在判断容量不超过背包容量的情况下,过滤出与已知最大价值的值相等的组合,此组合就是装入背包的物品26     import itertools27     for i in range(len(w)+1):28         h = list(itertools.combinations(range(1, len(w)+1), i))29         for j in h:30             x = []31             y = []32             for z in j:33                 x.append(v[z-1])34                 y.append(w[z-1])35             if sum(x) == res[n][weight] and sum(y) <= 50;36                 for z in j:37                     print('第', z, '个物品,', end='' )38       print('得到的最大价值=', res[n][weight])39 40 weight_goods(3, 50, [10,20,30], [60,100,120])

 

下一章节:完全背包

转载于:https://www.cnblogs.com/qfdxxdr/p/9153120.html

你可能感兴趣的文章
Jmeter性能测试 入门 (Z)
查看>>
CodeForcs 1169B Good Triple
查看>>
odoo明细表汇总数据
查看>>
无缝滚动 js 一
查看>>
windows环境搭建禅道项目管理工具
查看>>
Fibonacci数列
查看>>
10个带源码的充满活力的Web设计教程
查看>>
[14]CSS3 文本效果
查看>>
检索 COM 类工厂中 CLSID 为 {BDEADF26-C265-11D0-BCED-00A0C90AB50F}的组件时失败,原因是出现以下错误: 80040154。...
查看>>
陶哲轩实分析习题17.3.2
查看>>
CentOS rpmdb open failed
查看>>
UILabel
查看>>
indexOf()的用法
查看>>
前端 时间个性化 插件 jquery.timeago.js
查看>>
20145337 《Java程序设计》第九周学习总结
查看>>
js中frame的操作问题
查看>>
BZOJ 4913 [Sdoi2017] 遗忘的集合
查看>>
Java经典设计模式(1):五大创建型模式(附实例和详解)
查看>>
Vue源码探究-数据绑定的实现
查看>>
【九】MongoDB管理之安全性
查看>>