package com.bluecup.org;
import java.util.Scanner;
public class MaxValue {
/**
* @param args
*/
static int f[][][] = new int[20][20][2];
static int a[] = new int[20];
static char c[] = new char[20];
public static void main(String[] args) {
// TODO Auto-generated method stub
// String str="123456";
// String str1="+*+++";
Scanner scan = new Scanner(System.in);
String str = scan.next();
init(str);
for (int i = 2; i <= n; i++) {
for (int j = 0; n >= j + i; j++)
for (int k = 1; k < i; k++) {
if (i == 2) {
if (c[j + k - 1] == '+'){
f[j][j + 1][0] = f[j][j + 1][1] = a[j] + a[j + 1];
}
else
{
f[j][j + 1][0] = f[j][j + 1][1] = a[j] * a[j + 1];
}
} else {
if (c[j + k - 1] == '+') {
int r1 = f[j][j + k - 1][0]
+ f[j + k][j + i - 1][0];
int r2 = f[j][j + k - 1][1]
+ f[j + k][j + i - 1][0];
int r3 = f[j][j + k - 1][0]
+ f[j + k][j + i - 1][1];
int r4 = f[j][j + k - 1][1]
+ f[j + k][j + i - 1][1];
f[j][j + i - 1][0] = Math.max(Math.max(r1, r2),
Math.max(r3, r4));
f[i][j + i][1] = Math.min(Math.min(r1, r2),
Math.min(r3, r4));
} else {
int r1 = f[j][j + k - 1][0]
* f[j + k][j + i - 1][0];
int r2 = f[j][j + k - 1][1]
* f[j + k][j + i - 1][0];
int r3 = f[j][j + k - 1][0]
* f[j + k][j + i - 1][1];
int r4 = f[j][j + k - 1][1]
* f[j + k][j + i - 1][1];
f[j][j + i - 1][0] = Math.max(Math.max(r1, r2),
Math.max(r3, r4));
f[i][j + i][1] = Math.min(Math.min(r1, r2),
Math.min(r3, r4));
}
}
}
}
System.out.println(f[0][n-1][0]);
}
static int n;
private static void init(String str) {
// TODO Auto-generated method stub
int i = 0;
int num = 0;
while (i < str.length()) {
if (str.charAt(i) == '*' || str.charAt(i) == '+') {
c[n] = str.charAt(i);
a[n] = num;
f[n][n][0]=num;
f[n][n++][1]=num;
num = 0;
} else {
if(str.charAt(i)>='0'&&str.charAt(i)<='9')
num = num * 10 + Integer.parseInt(str.charAt(i) + "");
}
i++;
}
a[n] = num;
f[n][n][0]=num;
f[n][n++][1]=num;
}
}
动态规划 表达式最大值
最新推荐文章于 2024-04-16 21:21:17 发布