leetcode1770.执行乘法运算的最大分数


贪心:每次都选择乘数最大的进行累加能到结果。但是在示例2中,第三步时mul是3,而可选择的num是-3和1,采用贪心会选择1但是正确的答案是选择-3,贪心并不能解决该问题
class Solution {public int maximumScore(int[] nums, int[] multipliers) {int left=0,right=nums.length-1;int result=0;for(int mul:multipliers){int add=nums[left]*mul>=nums[right]*mul?nums[left++]*mul:nums[right--]*mul;result+=add;}return result;}
}区间dp:

class Solution {public int maximumScore(int[] nums, int[] multipliers) {int n = nums.length, m = multipliers.length;int[][] dp = new int[m + 1][m + 1];for (int[] ints : dp) {Arrays.fill(ints, Integer.MIN_VALUE);}dp[0][0] = 0;。。。for (int i = 1; i <= m; i++) {for (int j = 0; j < i; j++) {//1.选择右边的数字int endIndex = n - (i - j);dp[i][j] = Math.max(dp[i][j], dp[i - 1][j] + multipliers[i - 1] * nums[endIndex]);//2.选择左边的数字dp[i][j + 1] = Math.max(dp[i][j + 1], dp[i - 1][j] + multipliers[i - 1] * nums[j]);}}int maxScore = Integer.MIN_VALUE;for (int i = 0; i < m; i++) {maxScore = Math.max(maxScore, dp[m][i]);}return maxScore;}
}