# # 有 N 件物品和一个容量是 V 的背包。每件物品有且只有一件。 # # 第 i 件物品的体积是v[i] ,价值是w[i] 。 # # # # 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 # # https://blog.csdn.net/m0_59139260/article/details/124600813 # 输入: N = 3, V = 4, v = [4,2,3], w = [4,2,3] # 输出: 4 # 解释: 只选第一件物品,可使价值最大。 # # # # 输入: N = 3, V = 5, v = [4,2,3], w = [4,2,3] # 输出: 5 # 解释: 不选第一件物品,选择第二件和第三件物品,可使价值最大。 # 动态规划5步取 # 1.dp[j] 容量为j的背包中,怎么放物品取得的价值最大 # 2.dp[j] = max(dp[j],dp[j-v[i]]+w[i]) # 3.初始化dp数组,dp[j]=0 # 4.确定遍历顺序 ,物品从前往后,背包从后往前 # 5.打印dp数组 N = 3 V = 5 v = [4, 2, 3] w = [4, 2, 3] def get_most_price(N, V, v, w): dp = [0]*(V+1) if N == 0 or V == 0: return 0 dp[0] = 0 for i in range(0, N): for j in range(V, 0, -1): if j >= v[i]: dp[j] = max(dp[j], dp[j - v[i]] + w[i]) print(j, dp[j]) else: dp[j] = dp[j-1] print(dp) return dp[V] print(get_most_price(N, V, v, w))
10.动态规划-0-1背包-滚动数组优化.py
最新推荐文章于 2024-03-07 11:18:57 发布