前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态规划——背包问题笔记

动态规划——背包问题笔记

作者头像
蛮三刀酱
发布2019-03-26 17:18:33
4950
发布2019-03-26 17:18:33
举报

理解动态规划先从:

通过金矿模型介绍动态规划

之后,可以通过下面博客的表来理解:

动态规划之01背包问题(最易理解的讲解)

程序实现时,思路和画表时相同

给出程序:http://blog.csdn.net/littlethunder/article/details/26575417

01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] }

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# n为物品数量
# c为背包重量
# w为每个物品重量
# v为每个物品价值
def bag(n, c, w, v):  
	res=[[-1 for j in range(c+1)] for i in range(n+1)]
	for j in range(c+1):
		res[0][j] = 0
	for i in range(1, n+1):
		for j in range(1, c+1):
			res[i][j] = res[i-1][j]
			if j >= w[i-1] and res[i][j] < res[i-1][j-w[i-1]] + v[i-1]:
				res[i][j] = res[i-1][j-w[i-1]] + v[i-1]
	return res


def show(n, c, w, res):
	print('最大价值为:',res[n][c])
	x = [False for i in range(n)]
	j = c
	for i in range(1,n+1):
		if res[i][j] > res[i-1][j]:
			x[i-1] = True
			j -= w[i-1]
	print('选择的物品为:')
	for i in range(n):
		if x[i]:
			print('第',i,'个,',end='')
	print('')

if __name__ == '__main__':
	n = 4
	c = 10
	w = [5,2,8,3]
	v = [7,3,10,4]
	res = bag(n,c,w,v)
	show(n,c,w,res)

给出程序

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年02月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] }
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档