1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| func maxmiumScore(cards []int, cnt int) int { // 奇偶分组 odds := []int{} evens := []int{} for _, card := range cards { if (card & 1) == 0 { evens = append(evens, card) } else { odds = append(odds, card) } } // 排序,在数组最后多插入一个 0,方便后续计算 n1 := len(odds) sort.Ints(odds) for i := n1 - 2; i >= 0; i-- { odds[i] += odds[i+1] } odds = append(odds, 0)
n2 := len(evens) sort.Ints(evens) for i := n2 - 2; i >= 0; i-- { evens[i] += evens[i+1] } evens = append(evens, 0) // 假设奇数数量为 oddNum,偶数数量为 evenNum // 最后相加的结果要得到偶数,奇数的数量需要满足 oddNum % 2 == 0,那么偶数的数量就是 cnt - oddNum // 为了得到最大的总和,需要枚举所有满足的奇偶组合,取最大值为最后的结果 ans := 0 for oddNum := 0; oddNum <= n1 && oddNum <= cnt; oddNum += 2 { evenNum := cnt - oddNum if evenNum < 0 { break } else if evenNum > n2 { continue } curSum := 0 curSum += odds[n1-oddNum] curSum += evens[n2-evenNum] ans = max(ans, curSum) } return ans }
|