# stage10-01 **Repository Path**: cllyl/stage10-01 ## Basic Information - **Project Name**: stage10-01 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-14 - **Last Updated**: 2021-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 背包问题 ## 前言 贪心算法解决部分背包问题 动态对话(Dynamic Programming)解决0-1背包问题 ## 0-1背包问题 #### 问题描述 有1个背包,能承受的最大重量为W 有N件物品,每件物品的重量为W[i],价值为V[i] 每件物品只能放进去0或者1次 求背包能够承受的最大价值是多少 #### 问题分析 由质分析,转换为定量分析。 假设: 背包总重量为10 共有5件物品 | | 重量(Weight) | 价值(Value) | | ------------------ | -------------- | ------------- | | 0(W[0]=2,V[0]=6) | 2 | 6 | | 1(W[1]=2,V[1]=3) | 2 | 3 | | 2(W[2]=6,V[2]=5) | 6 | 5 | | 3(W[3]=5,V[3]=4) | 5 | 4 | | 4(W[4]=4,V[4]=6) | 4 | 6 | ###### 承重分析 横轴为最大重量 纵轴为物品信息 表格中显示的是对应重量物品的价值,最大价值(最优解) | dp(i,j) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | ------------------ | ---- | ---- | ------ | ------ | ------ | ------ | ------ | ------ | ------- | ------ | ------ | | 空(W=0,V=0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 0(W[0]=2,V[0]=6) | 0 | 0 | 6(0) | 6(0) | 6(0) | 6(0) | 6(0) | 6(0) | 6(0) | 6(0) | 6(0) | | 1(W[1]=2,V[1]=3) | 0 | 0 | 6(0) | 6(0) | 9(0,1) | 9(0,1) | 9(0,1) | 9(0,1) | 9(0,1) | 9(0,1) | 9(0,1) | | 2(W[2]=6,V[2]=5) | 0 | 0 | 6(0) | 6(0) | 9(0,1) | 9(0,1) | 9(0,1) | 9(0,1) | 11(0,2) | 11 | 11 | | 3(W[3]=5,V[3]=4) | 0 | 0 | 6 | 6 | 9 | 9 | 9 | 10 | 11 | 13 | 14 | | 4(W[4]=4,V[4]=6) | 0 | 0 | 6 | 6 | 9 | 9 | 12 | 12 | 15 | 15 | 15 | dp(0,2)的时候,添加0 dp(1,2)的时候,不添加,不移除,保持不变 dp(1,4)的时候,添加1,不移除 dp(2,8)的时候,可以选择当前2号商品, 如上图标可以按照一下思路分析 向背包中添加物品。 添加物品分为一下三种情况 - 可以添加 - 添加 - 不添加 - 不可以添加 > 不可以添加 $j