解题思路:
该题目可以使用穷举法,因为只有3个数字,但是如果多个数字则需要我们使用动态规划
动态规划解法:
在n个数中,我们可以通过改变一个参数r *来对数字进行分组,比如说总共有4个数,1,2,3,4
*当r=2时,可以为 12 23 34 总共有三组这时候我们可以计算每一组内的最大值
当r=3时,可以为 123 234 总共两组 那比如说第一组 123 我们就可以利用前面r=2计算好的最大值来计
算当前最大值 而这时候就需要一个断点k,
当k在 1 [2,3] 之间 那答案就等于Math.max(1*[2,3],1+[2,3])
当k在 [1,2] 3 之间,那答案就等于Math.max([1,2]*3,[1,2]+3)
所以我们就需要循环来改变k值也就是在该组内的断点来获取最大值,然后取不同k值获取的最大值的最
大值
当r=4时,分组只有一个 [1,2,3,4] 那断点k就可以有3个位置,而我们需要计算的就是断开后的两组之间的相加或相乘的最大值,而断开的两组各自的最大值我们在前面r = 2,3已经计算过了,所以最后可以得到答案
public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = 3; int[][] dp = new int[n][n]; for(int i = 0;i<n;i++){ dp[i][i] = sc.nextInt(); } for(int r = 2;r<=n;r++){ for(int i = 0;i<n-r+1;i++){ int j = i+r-1; for(int k = i;k<j;k++){ dp[i][j] = Math.max(dp[i][j],Math.max(dp[i][k]*dp[k+1][j],dp[i][k]+dp[k+1][j])); } } } System.out.println(dp[0][n-1]); }