func pack(weight, value []int, cap int) int {
dp := make([][]int, 0)//dp[i][j]表示容量j下前i个物品最大的value
for i := 0; i <= len(value); i++ {
dp = append(dp, make([]int, cap + 1))
}
for i := 1; i <= cap; i++ {
for j := 1; j <= len(weight); j++ {
curValue := value[j - 1]
curWeight := weight[j - 1]
if i >= curWeight {
//这个物品可以装或者不装
yes := dp[j - 1][i - curWeight] + curValue
dp[j][i] = max(dp[j - 1][i], yes)
} else {
//不装
dp[j][i] = dp[j - 1][i]
}
}
}
return dp[len(value)][cap]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
01背包-go实现
最新推荐文章于 2025-02-05 09:10:48 发布