fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int t;
  7. cin>>t;
  8. while(t--){
  9. int n;
  10. cin>>n;
  11. vector<int> maxdp(n+1);
  12. vector<int> mindp(n+1);
  13. maxdp[0] = 1;
  14. mindp[0] = 1;
  15.  
  16. for(int i=1; i<=n; i++){
  17. char c;
  18. cin>>c;
  19.  
  20. if(c == '+'){
  21. int x;
  22. cin>>x;
  23. maxdp[i] = max(maxdp[i-1]+x, max(maxdp[i-1], mindp[i-1]+x));
  24. mindp[i] = min(maxdp[i-1]+x, min(mindp[i-1], mindp[i-1]+x));
  25. }
  26. else if(c == '-'){
  27. int x;
  28. cin>>x;
  29. maxdp[i] = max(maxdp[i-1]-x, max(maxdp[i-1], mindp[i-1]-x));
  30. mindp[i] = min(maxdp[i-1]-x, min(mindp[i-1], mindp[i-1]-x));
  31. }
  32. else if(c == '*'){
  33. int x;
  34. cin>>x;
  35. maxdp[i] = max(maxdp[i-1]*x, max(maxdp[i-1], mindp[i-1]*x));
  36. mindp[i] = min(maxdp[i-1]*x, min(mindp[i-1], mindp[i-1]*x));
  37. }
  38. else if(c == '/'){
  39. int x;
  40. cin>>x;
  41. maxdp[i] = max(maxdp[i-1]/x, max(maxdp[i-1], mindp[i-1]/x));
  42. mindp[i] = min(maxdp[i-1]/x, min(mindp[i-1], mindp[i-1]/x));
  43. }
  44. else{
  45. maxdp[i] = max(maxdp[i-1], max(-1*maxdp[i-1], -1*mindp[i-1]));
  46. mindp[i] = min(mindp[i-1], min(-1*maxdp[i-1],-1*mindp[i-1]));
  47. }
  48. }
  49. cout<<maxdp[n];
  50. }
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
11