| 12345678910111213141516171819202122232425262728293031323334353637383940 | func shoppingOffers(price []int, special [][]int, needs []int) int {	var need [6]int	copy(need[:], needs)	m := make(map[[6]int]int)	return buy(price, special, need, m) // DFS}func buy(price []int, special [][]int, need [6]int, m map[[6]int]int) int {	if v, ok := m[need]; ok {		return v	}	res := 0	for i := range price {		res += need[i] * price[i]	} // The price without special offer	for _, s := range special {		var n [6]int		copy(n[:], need[:])		i := 0		for ; i < len(price); i++ {			n[i] -= s[i]			if n[i] < 0 {				break			}		}		if i == len(price) {			res = minInt(res, s[i]+buy(price, special, n, m))		}	}	m[need] = res	return res}func minInt(x, y int) int {	if x < y {		return x	}	return y}
 |