fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. vector<pair<int,char>>v={
  7. {10,'s'}, // -10
  8. {2,'m'}, // *2
  9. {5,'a'}, // +5
  10. {2,'n'}, // negate
  11. {3,'m'} // *3
  12. };
  13. int n=v.size();
  14. cout<<"test1"<<endl;
  15. vector<vector<int>>dpx(n+1,vector<int>(2,0)),dpn(n+1,vector<int>(2,0));
  16. dpx[0][1]=1;
  17. dpx[0][0]=1;
  18. dpn[0][1]=1;
  19. dpn[0][0]=1;
  20. for(int i=1;i<=n;i++){
  21.  
  22. if(v[i-1].second=='a'){
  23.  
  24. dpx[i][1]=v[i-1].first+max(dpx[i-1][0],dpx[i-1][1]);
  25. dpx[i][0]=max(dpx[i-1][0],dpx[i-1][1]);
  26. dpn[i][1]=v[i-1].first+min(dpn[i-1][0],dpn[i-1][1]);
  27. dpn[i][0]=min(dpn[i-1][0],dpn[i-1][1]);
  28. }
  29. if(v[i-1].second=='s'){
  30.  
  31. dpx[i][1]=max(dpx[i-1][0],dpx[i-1][1])-v[i-1].first;
  32. dpx[i][0]=max(dpx[i-1][0],dpx[i-1][1]);
  33. dpn[i][1]=min(dpn[i-1][0],dpn[i-1][1])-v[i-1].first;
  34. dpn[i][0]=min(dpn[i-1][0],dpn[i-1][1]);
  35. }
  36. if(v[i-1].second=='m'){
  37.  
  38. dpx[i][1]=v[i-1].first*max(dpx[i-1][0],dpx[i-1][1]);
  39. dpx[i][0]=max(dpx[i-1][0],dpx[i-1][1]);
  40. dpn[i][1]=v[i-1].first*min(dpn[i-1][0],dpn[i-1][1]);
  41. dpn[i][0]=min(dpn[i-1][0],dpn[i-1][1]);
  42. }
  43. if(v[i-1].second=='d'){
  44.  
  45. dpx[i][1]=max(dpx[i-1][0],dpx[i-1][1])/v[i-1].first;
  46. dpx[i][0]=max(dpx[i-1][0],dpx[i-1][1]);
  47. dpn[i][1]=min(dpn[i-1][0],dpn[i-1][1])/v[i-1].first;
  48. dpn[i][0]=min(dpn[i-1][0],dpn[i-1][1]);
  49. }
  50. if(v[i-1].second=='n'){
  51.  
  52. dpx[i][1]=max(dpn[i-1][0]*(-1),dpn[i-1][1]*(-1));
  53. dpx[i][0]=max(dpx[i-1][0],dpx[i-1][1]);
  54. dpn[i][1]=min(dpx[i-1][0]*(-1),dpx[i-1][1]*(-1));
  55. dpn[i][0]=min(dpn[i-1][0],dpn[i-1][1]);
  56. }
  57. }
  58.  
  59.  
  60. cout<<" ans "<<max(dpx[n][0],dpx[n][1])<<endl;
  61.  
  62. return 0;
  63. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
test1
 ans 54