0/1背包问题
来源:互联网 发布:购买网络电视 编辑:程序博客网 时间:2024/05/16 15:27
定义状态: f(i,j) 为 前i件物品占用j容量时的最大价值,得到状态转移方程为:
#w[i]为第i件物品的重量,v[i]为第i件物品的价值
if w[i]<=j: #放得进
f(i,j)=max{f(i-1,j),f(i-1,j-w[i])+v[i]}
else: #放不进
f(i,j)=f(i-1,j)
def Knapsack_01(T,w,v,n):f=[[0 for col in range(T+1)]for row in range(n+1)]#边界设置for i in range(n+1):f[i][0]=0for i in range(T+1):f[0][i]=0for i in range(1,n+1):for j in range(1,T+1):if w[i]<=j:f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i])else:f[i][j]=f[i-1][j]#由f推导选择序列select=[0 for i in range(n+1)]j=Tfor i in range(n,0,-1):if f[i][j]>f[i-1][j]:select[i]=1j-=w[i]print("最大价值: "+str(f[n][T]))print("最优选择序列:",end=' ')for each in range(1,n+1):print(select[each],end=' ')return f#testT=6w = [0, 2, 3, 4]v = [0, 1, 2, 5]n=len(w)-1Knapsack_01(T,w,v,n)
- 背包问题(0-1背包、完全背包、多重背包)详解
- 背包问题和0-1背包问题
- 背包问题和0-1背包问题
- 背包问题系列--"0-1背包问题"
- 背包笔记-含0/1背包问题、完全背包问题、多重背包问题、二维背包问题、分组背包问题
- 【背包问题】背包问题之0-1背包、完全背包、多重背包
- 0-1背包问题
- 0/1背包问题
- 0,1背包问题
- 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- // 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- 0-1背包问题
- 0-1背包问题
- 0/1背包问题
- 线程的取消模式
- 智能眼镜前景
- setup WinXp on lenovo G480
- Cocos2d-x实现精灵的拖动
- Homework Checker(湖南省第六届ACM竞赛题)
- 0/1背包问题
- CSS
- sort uniq妙用
- C/C++ 语言中的表达式求值
- Ubuntu如何安装应用程序
- 在IE9.0中引用ExtJs出现“SCRIPT438: 对象不支持"createRange”属性或方法”
- 基础学习笔记之opencv(18):kmeans函数使用实例
- 使用Bundle在Activity之间传递信息
- maven 配置 mvn -v