mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
@ -245,7 +245,94 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
Go:
|
Go:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package theory
|
||||||
|
|
||||||
|
import "log"
|
||||||
|
|
||||||
|
// 多重背包可以化解为 01 背包
|
||||||
|
func multiplePack(weight, value, nums []int, bagWeight int) int {
|
||||||
|
|
||||||
|
for i := 0; i < len(nums); i++ {
|
||||||
|
for nums[i] > 1 {
|
||||||
|
weight = append(weight, weight[i])
|
||||||
|
value = append(value, value[i])
|
||||||
|
nums[i]--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Println(weight)
|
||||||
|
log.Println(value)
|
||||||
|
|
||||||
|
res := make([]int, bagWeight+1)
|
||||||
|
for i := 0; i < len(weight); i++ {
|
||||||
|
for j := bagWeight; j >= weight[i]; j-- {
|
||||||
|
res[j] = getMax(res[j], res[j-weight[i]]+value[i])
|
||||||
|
}
|
||||||
|
log.Println(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
return res[bagWeight]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> 单元测试
|
||||||
|
|
||||||
|
```go
|
||||||
|
package theory
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func Test_multiplePack(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
weight []int
|
||||||
|
value []int
|
||||||
|
nums []int
|
||||||
|
bagWeight int
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want int
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "one",
|
||||||
|
args: args{
|
||||||
|
weight: []int{1, 3, 4},
|
||||||
|
value: []int{15, 20, 30},
|
||||||
|
nums: []int{2, 3, 2},
|
||||||
|
bagWeight: 10,
|
||||||
|
},
|
||||||
|
want: 90,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := multiplePack(tt.args.weight, tt.args.value, tt.args.nums, tt.args.bagWeight); got != tt.want {
|
||||||
|
t.Errorf("multiplePack() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> 输出
|
||||||
|
|
||||||
|
```
|
||||||
|
=== RUN Test_multiplePack
|
||||||
|
=== RUN Test_multiplePack/one
|
||||||
|
2022/03/02 21:09:05 [1 3 4 1 3 3 4]
|
||||||
|
2022/03/02 21:09:05 [15 20 30 15 20 20 30]
|
||||||
|
2022/03/02 21:09:05 [0 15 15 15 15 15 15 15 15 15 15]
|
||||||
|
2022/03/02 21:09:05 [0 15 15 20 35 35 35 35 35 35 35]
|
||||||
|
2022/03/02 21:09:05 [0 15 15 20 35 45 45 50 65 65 65]
|
||||||
|
2022/03/02 21:09:05 [0 15 30 30 35 50 60 60 65 80 80]
|
||||||
|
2022/03/02 21:09:05 [0 15 30 30 35 50 60 60 70 80 80]
|
||||||
|
2022/03/02 21:09:05 [0 15 30 30 35 50 60 60 70 80 80]
|
||||||
|
2022/03/02 21:09:05 [0 15 30 30 35 50 60 60 70 80 90]
|
||||||
|
--- PASS: Test_multiplePack (0.00s)
|
||||||
|
--- PASS: Test_multiplePack/one (0.00s)
|
||||||
|
PASS
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
Reference in New Issue
Block a user