func BagProblem(weight []int, wealth []int, maxweight int) int {
m := len(weight)
//先遍历物品,再遍历背包大小
dp := make([][]int, m)
//初始化
for i := 0; i < m; i++ {
dp[i] = make([]int, maxweight+1)
}
for i := weight[0]; i < maxweight; i++ {
dp[0][i] = wealth[0]
}
//begin
for i := 1; i < m; i++ { //遍历物品
for j := 0; j < maxweight+1; j++ { //遍历背包
if j < weight[i] {
dp[i][j] = dp[i-1][j]
} else {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+wealth[i])
}
}
}
return dp[m-1][maxweight]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
一维滚动数组
func BagProblem(weight []int, wealth []int, maxweight int) int {
m := len(weight)
dp := make([]int, maxweight+1)
//begin
for i := 0; i < m; i++ { //遍历物品
for j := maxweight; j >=weight[i]; j-- { //遍历背包
dp[j] = max(dp[j], dp[j-weight[i]]+wealth[i])
}
}
return dp[maxweight]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}