LeetCode in Kotlin

1770. Maximum Score from Performing Multiplication Operations

Medium

You are given two integer arrays nums and multipliers of size n and m respectively, where n >= m. The arrays are 1-indexed.

You begin with a score of 0. You want to perform exactly m operations. On the ith operation (1-indexed), you will:

Return the maximum score after performing m operations.

Example 1:

Input: nums = [1,2,3], multipliers = [3,2,1]

Output: 14

Explanation: An optimal solution is as follows:

The total score is 9 + 4 + 1 = 14.

Example 2:

Input: nums = [-5,-3,-3,-2,7,1], multipliers = [-10,-5,3,4,6]

Output: 102

Explanation: An optimal solution is as follows:

The total score is 50 + 15 - 9 + 4 + 42 = 102.

Constraints:

Solution

class Solution {
    fun maximumScore(nums: IntArray, multipliers: IntArray): Int {
        val n = nums.size
        val m = multipliers.size
        var row = m
        val dp = IntArray(m)
        var prev = IntArray(m + 1)
        while (--row >= 0) {
            for (i in 0..row) {
                dp[i] = Math.max(
                    prev[i] + multipliers[row] * nums[n - row + i - 1],
                    prev[i + 1] + multipliers[row] * nums[i]
                )
            }
            prev = dp
        }
        return dp[0]
    }
}