

贪心:每次都选择乘数最大的进行累加能到结果。但是在示例2中,第三步时mul是3,而可选择的num是-3和1,采用贪心会选择1但是正确的答案是选择-3,贪心并不能解决该问题
java
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:

java
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;
}
}