条件: rongliang = 10 products = [3,4,5,7] # 每个产品的体积 values = [1,5,6,9] # 每个产品的价值 products.insert(0,0) values.insert(0,0) # 以上两行主要是为了让下标和后面的循环行列号保持一致 dp = [[0] * (rongliang +1) for i in range(len(products))] for i in dp: print(i) print("~~~~~~~~") for i in range(1,len(products)): for j in range(1,rongliang + 1): if j > products[i]: dp[i][j] = max(dp[i-1][j],dp[i-1][j-products[i]] + values[i]) else: dp[i][j] = dp[i-1][j] print("result:") for l in dp: print(l)
解题关键在于容量>当前产品体积的时候如何获取最大价值:
只有2种情况:
第一种就是当前容量在放了其他产品的情况下可以放下当前产品则:
dp[i][j] = dp[i-1][j-products[i]]+values[i] --- 相当于用放下第i个产品的价值+ 剩余容量所对应的价值
第二种就是当前容量在放了其他产品的情况下放不下当前产品则:
dp[i][j] = dp[i-1][j]