直接上题目
题目:
给你⼀个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两 个属性。其中第 i 个物品的重量为 wt[i] ,价值为 val[i] ,现在让你⽤ 这个背包装物品,最多能装的价值是多少?
举个简单的例⼦,输⼊如下: N = 3, W = 4 wt = [2, 1, 3] val = [4, 2, 3]
解析:
1. 定义状态
dp[a][b], a表示物品,b表示重量,dp表示最多能装的价值
2. 明确状态转移
for i=from 1 to a {
for j=from 1 to b {
if w - wt[i-1] < 0 {
dp[i][j] = dp[i-1][j] 装不下
} else { 装的下
dp[i][j] = max(
dp[i-1][j],
dp[i-1][j- wt[i-1]] + val[i-1]
)
}
}
}
本质就是穷举,状态可以根据穷举的顺序迭代