链接:http://www.lintcode.com/zh-cn/problem/calculate-maximum-value-ii/
Given a string of numbers, write a function to find the maximum value from the string, you can add a + or * sign between any two numbers,It's different with Calculate Maximum Value
, You can insert parentheses anywhere.
Given str = 01231
, return 12
(0 + 1 + 2) * (3 + 1) = 12
we get the maximum value 12
Given str = 891
, return 80
As 8 * (9 + 1) = 80
, so 80
is maximum.
class Solution {
public:
/**
* @param str: a string of numbers
* @return: the maximum value
*/
int maxValue(string &str) {
// write your code here
int size=str.size();
if(size==0)
return 0;
vector<int> nums;
for(auto c: str)
nums.push_back(c-'0');
vector<vector<int>> dp(size,vector<int>(size,0));
for(int i=0;i<size;i++)
{
dp[i][i]=nums[i];
}
for(int step=1;step<size;step++)
{
for(int left=0;left<size-step;left++)
{
int right=left+step;
int maxvalue=0;
for(int mid=left;mid<right;mid++)
{
maxvalue=max(maxvalue,max(dp[left][mid]+dp[mid+1][right],dp[left][mid]*dp[mid+1][right]));
}
dp[left][right]=maxvalue;
}
}
return dp[0][size-1];
}
};