美文网首页
执行乘法运算的最大分数

执行乘法运算的最大分数

作者: phusFuNs | 来源:发表于2021-02-22 11:26 被阅读0次

题目:

[1770. 执行乘法运算的最大分数]

给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,数组下标 从 1 开始 计数。

初始时,你的分数为 0 。你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要:

选择数组 nums 开头处或者末尾处 的整数 x 。
你获得 multipliers[i] * x 分,并累加到你的分数中。
将 x 从数组 nums 中移除。
在执行 m 步操作后,返回 最大 分数。

链接:https://leetcode-cn.com/problems/maximum-score-from-performing-multiplication-operations

解题方法

定义二维数组dp[m + 1][m + 1]。dp[i][j]:表示nums数组中前i个数和后j个数组成的最大分数。
base case:
dp[0][0] = 0;

dp[i][0]:此状态表示nums数组中前i个数和后0个数组成的最大分数,此状态只可能由dp[i - 1][0]转移得到。

dp[0][j]:此状态表示nums数组中前0个数和后j个数组成的最大分数,此状态只可能由dp[0][j - 1]转移得到。

dp[i][j]:该状态表示nums数组中前i个数和后j个数组成的最大分数,可能由状态
dp[i - 1][j]和状态dp[i][j - 1]转移得到,取其中得分最大的一个。

遍历所有可能的组合(满足i + j = m)获得最大得分。

代码

class Solution {
    public int maximumScore(int[] nums, int[] multipliers) {
        int n = nums.length,m = multipliers.length;
        int[][] dp = new int[1000 + 5][1000 + 5];
        dp[0][0] = 0;
        for (int i = 1;i <= m;++i) dp[i][0] = dp[i - 1][0] + nums[i - 1] * multipliers[i - 1];
        for (int j = 1;j <= m;++j) dp[0][j] = dp[0][j - 1] + nums[n - j] * multipliers[j - 1];
        for (int i = 1;i <= m;++i){
            for (int j = 1;i + j <= m;++j){
                dp[i][j] = Math.max(dp[i - 1][j] + nums[i - 1] * multipliers[i + j - 1],dp[i][j - 1] + nums[n - j] * multipliers[i + j - 1]);
            }
        }
        int ans = Integer.MIN_VALUE;
        for (int i = 0;i <= m;++i) ans = Math.max(ans,dp[i][m - i]);
        return ans;
    }
}

参考链接:https://leetcode-cn.com/problems/maximum-score-from-performing-multiplication-operations/solution/dong-tai-gui-hua-er-wei-zhuang-tai-ding-slg21/

相关文章

  • 执行乘法运算的最大分数

    题目: [1770. 执行乘法运算的最大分数] 给你两个长度分别 n 和 m 的整数数组 nums 和 multi...

  • 分数乘法

    第一讲分数乘法的意义 1、分数乘整数与整数乘法的意义相同。都是求几个相同加数的和的简便运算。 整数乘分数的意义求一...

  • 算术运算符

    算术运算符对数字(文字或变量)执行算术运算。 加法运算 减法运算 乘法运算 除法运算 余数运算 自增自减运算 指数...

  • 趣味数学故事92……“0”为什么不能做除数

    什么是分数除法:分数除法是分数乘法的逆运算。分数除法计算法则:甲数除以乙数(O除外),等于甲数乘乙数的倒数...

  • 分数乘法(三)教学反思

    分 数乘法(三)主要的学习内容是分数乘以分数,本节课有四个学习要点:第一是分数乘以分数的运算法则:分子乘以分...

  • 分数乘整数

    六年级上册的第一单元是分数乘法,这一单元与整数乘法的运算法则相同。现在我就来介绍一下分数乘整数吧。 先说一下...

  • 分数乘法(一)教学反思

    分数乘法(一)主要内容是整数乘以分数,运算了法则是:分母不变,整数与分子相乘作为分子。本节课的学习内容比...

  • JavaScript算术运算符

    算术运算符用于对数字(文字或变量)执行算术运算。标准算术运算符是加法 +,减法 -,乘法 * 和除法 /。和数学里...

  • JavaScript算术运算符

    算术运算符用于对数字(文字或变量)执行算术运算。标准算术运算符是加法 +,减法 -,乘法 * 和除法 /。和数学里...

  • 除法与分数

    在小学,我们都要学习“分数的除法运算要将分子分母颠倒后相乘”,我们思考下为什么这条定律是正确的? 除法运算是乘法运...

网友评论

      本文标题:执行乘法运算的最大分数

      本文链接:https://www.haomeiwen.com/subject/yxmhfltx.html