Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include<cstring>
- using namespace std;
- void MinAndMax(char *exp)
- {
- long long num[50],n,k=0,j=0,i,a,b,c,d;
- char opr[50];
- n=strlen(exp);
- for (i = 0; i < n; i++)
- {
- if (strchr("+*-",exp[i])!=0)
- {
- opr[k]=exp[i];
- k++;
- }
- else
- {
- num[j]= exp[i]-48;
- j++;
- }
- }
- num[j]=exp[i];
- opr[k]=0;
- int len = j;
- long long minVal[j][j];
- long long maxVal[j][j];
- for (int i = 0; i < len; i++)
- {
- for (int j = 0; j < len; j++)
- {
- minVal[i][j] = (1LL<<62);
- maxVal[i][j] = -(1LL<<62);
- if (i == j)
- minVal[i][j] = maxVal[i][j] = num[i];
- }
- }
- for (int L = 1; L <= len; L++)
- {
- for (int i = 0; i < len - L + 1; i++)
- {
- int j = i + L - 1;
- for (int k = i; k < j; k++)
- {
- long long minTmp, maxTmp ;
- if(opr[k] == '+')
- {
- a = minVal[i][k] + minVal[k + 1][j];
- b = maxVal[i][k] + maxVal[k + 1][j];
- c = minVal[i][k] + maxVal[k + 1][j];
- d = maxVal[i][k] + minVal[k + 1][j];
- }
- else if(opr[k] == '*')
- {
- a = minVal[i][k] * minVal[k + 1][j];
- b = maxVal[i][k] * maxVal[k + 1][j];
- c = minVal[i][k] * maxVal[k + 1][j];
- d = maxVal[i][k] * minVal[k + 1][j];
- }
- else if(opr[k] == '-')
- {
- a = minVal[i][k] - minVal[k + 1][j];
- b = maxVal[i][k] - maxVal[k + 1][j];
- c = minVal[i][k] - maxVal[k + 1][j];
- d = maxVal[i][k] - minVal[k + 1][j];
- }
- minTmp=min(min(a,b),min(c,d));
- maxTmp=max(max(a,b),max(c,d));
- if (minTmp < minVal[i][j])
- minVal[i][j] = minTmp;
- if (maxTmp > maxVal[i][j])
- maxVal[i][j] = maxTmp;
- }
- }
- }
- cout << maxVal[0][len - 1];
- }
- int main()
- {
- char exp[50];
- cin>>exp;
- MinAndMax(exp) ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement