2025-04-21:最高乘法得分。用go语言,你有一个长度为4的整数数组a,还有一个长度不少于4的整数数组b。
需要从b中选择4个严格递增的下标i0、i1、i2和i3,使得i0 < i1 < i2 < i3。
你的目标是使表达式 a[0]*b[i0] + a[1]*b[i1] + a[2]*b[i2] + a[3]*b[i3] 的值达到最大。
请返回这个最大可能的得分。
a.length == 4。
4 <= b.length <= 100000。
-100000 <= a[i], b[i] <= 100000。
输入: a = [3,2,5,6], b = [2,-6,4,-5,-3,2,-7]。
输出: 26。
解释:
选择下标 0, 1, 2 和 5。得分为 3 * 2 + 2 * (-6) + 5 * 4 + 6 * 2 = 26。
题目来自leetcode3290。
1.初始化状态数组 f:
2.遍历数组 b 的元素:
3.状态转移:
f[j+1] = max(f[j+1], f[j] + a[j] * y)
解释:4.完成状态更新:
5.输出结果:
package main
import (
"fmt"
"math"
)
func maxScore(a, b []int)int64 {
f := [5]int64{}
for j := 1; j < 5; j++ {
f[j] = math.MinInt64 / 2
}
for _, y := range b {
for j := 3; j >= 0; j-- {
f[j+1] = max(f[j+1], f[j]+int64(a[j])*int64(y))
}
}
return f[4]
}
func main() {
a := []int{3, 2, 5, 6}
b := []int{2, -6, 4, -5, -3, 2, -7}
results := maxScore(a, b)
fmt.Println(results)
}
# -*-coding:utf-8-*-
defmax_score(a, b):
f = [float('-inf')] * 5
f[0] = 0
for y in b:
for j inrange(3, -1, -1):
f[j+1] = max(f[j+1], f[j] + a[j] * y)
return f[4]
if __name__ == "__main__":
a = [3, 2, 5, 6]
b = [2, -6, 4, -5, -3, 2, -7]
result = max_score(a, b)
print(result)