Advertisement
a53

Expr_max

a53
Aug 8th, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. void MinAndMax(char *exp)
  6. {
  7. long long num[50],n,k=0,j=0,i,a,b,c,d;
  8. char opr[50];
  9. n=strlen(exp);
  10. for (i = 0; i < n; i++)
  11. {
  12. if (strchr("+*-",exp[i])!=0)
  13. {
  14. opr[k]=exp[i];
  15. k++;
  16. }
  17. else
  18. {
  19. num[j]= exp[i]-48;
  20. j++;
  21. }
  22. }
  23.  
  24. num[j]=exp[i];
  25. opr[k]=0;
  26. int len = j;
  27. long long minVal[j][j];
  28. long long maxVal[j][j];
  29.  
  30. for (int i = 0; i < len; i++)
  31. {
  32. for (int j = 0; j < len; j++)
  33. {
  34. minVal[i][j] = (1LL<<62);
  35. maxVal[i][j] = -(1LL<<62);
  36.  
  37. if (i == j)
  38. minVal[i][j] = maxVal[i][j] = num[i];
  39. }
  40. }
  41. for (int L = 1; L <= len; L++)
  42. {
  43. for (int i = 0; i < len - L + 1; i++)
  44. {
  45. int j = i + L - 1;
  46. for (int k = i; k < j; k++)
  47. {
  48. long long minTmp, maxTmp ;
  49.  
  50. if(opr[k] == '+')
  51. {
  52. a = minVal[i][k] + minVal[k + 1][j];
  53. b = maxVal[i][k] + maxVal[k + 1][j];
  54. c = minVal[i][k] + maxVal[k + 1][j];
  55. d = maxVal[i][k] + minVal[k + 1][j];
  56. }
  57.  
  58. else if(opr[k] == '*')
  59. {
  60. a = minVal[i][k] * minVal[k + 1][j];
  61. b = maxVal[i][k] * maxVal[k + 1][j];
  62. c = minVal[i][k] * maxVal[k + 1][j];
  63. d = maxVal[i][k] * minVal[k + 1][j];
  64. }
  65. else if(opr[k] == '-')
  66. {
  67. a = minVal[i][k] - minVal[k + 1][j];
  68. b = maxVal[i][k] - maxVal[k + 1][j];
  69. c = minVal[i][k] - maxVal[k + 1][j];
  70. d = maxVal[i][k] - minVal[k + 1][j];
  71. }
  72.  
  73. minTmp=min(min(a,b),min(c,d));
  74. maxTmp=max(max(a,b),max(c,d));
  75. if (minTmp < minVal[i][j])
  76. minVal[i][j] = minTmp;
  77. if (maxTmp > maxVal[i][j])
  78. maxVal[i][j] = maxTmp;
  79. }
  80.  
  81. }
  82. }
  83.  
  84. cout << maxVal[0][len - 1];
  85. }
  86. int main()
  87. {
  88.  
  89. char exp[50];
  90. cin>>exp;
  91. MinAndMax(exp) ;
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement