mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
@ -245,7 +245,94 @@ if __name__ == '__main__':
|
||||
|
||||
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