mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 11:34:46 +08:00
添加背包问题理论基础完全背包 Go版本
This commit is contained in:
@ -220,7 +220,58 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
|
|
||||||
Go:
|
Go:
|
||||||
|
```go
|
||||||
|
|
||||||
|
// test_CompletePack1 先遍历物品, 在遍历背包
|
||||||
|
func test_CompletePack1(weight, value []int, bagWeight int) int {
|
||||||
|
// 定义dp数组 和初始化
|
||||||
|
dp := make([]int, bagWeight+1)
|
||||||
|
// 遍历顺序
|
||||||
|
for i := 0; i < len(weight); i++ {
|
||||||
|
// 正序会多次添加 value[i]
|
||||||
|
for j := weight[i]; j <= bagWeight; j++ {
|
||||||
|
// 推导公式
|
||||||
|
dp[j] = max(dp[j], dp[j-weight[i]]+value[i])
|
||||||
|
// debug
|
||||||
|
//fmt.Println(dp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[bagWeight]
|
||||||
|
}
|
||||||
|
|
||||||
|
// test_CompletePack2 先遍历背包, 在遍历物品
|
||||||
|
func test_CompletePack2(weight, value []int, bagWeight int) int {
|
||||||
|
// 定义dp数组 和初始化
|
||||||
|
dp := make([]int, bagWeight+1)
|
||||||
|
// 遍历顺序
|
||||||
|
// j从0 开始
|
||||||
|
for j := 0; j <= bagWeight; j++ {
|
||||||
|
for i := 0; i < len(weight); i++ {
|
||||||
|
if j >= weight[i] {
|
||||||
|
// 推导公式
|
||||||
|
dp[j] = max(dp[j], dp[j-weight[i]]+value[i])
|
||||||
|
}
|
||||||
|
// debug
|
||||||
|
//fmt.Println(dp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[bagWeight]
|
||||||
|
}
|
||||||
|
|
||||||
|
func max(a, b int) int {
|
||||||
|
if a > b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
weight := []int{1, 3, 4}
|
||||||
|
price := []int{15, 20, 30}
|
||||||
|
fmt.Println(test_CompletePack1(weight, price, 4))
|
||||||
|
fmt.Println(test_CompletePack2(weight, price, 4))
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user