Advertisement
Guest User

Untitled

a guest
Mar 19th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "iostream"
  2. #include "assert.h"
  3.  
  4. using namespace std;
  5.  
  6.  
  7. class Ans{
  8. private:   
  9.     int **a;
  10.     int max_ind;
  11.     int N;
  12. public:
  13.     Ans();
  14.     Ans(int);
  15.     void init();
  16.     void getOptSet();
  17.     void getOptimal(int);
  18. };
  19.  
  20. Ans::Ans():
  21. a(NULL), max_ind(-1){}
  22.  
  23. Ans::Ans(int N){   
  24.     assert(N>=0);
  25.     a = new int*[N];
  26.     assert(a);
  27.     for(int i = 0; i < N; i++){
  28.         a[i] = new int[2];
  29.         assert(a[i]);  
  30.     }
  31.     this->N = N;
  32. }
  33. void Ans::init(){  
  34.     assert(N>=0);
  35.     cout << "Enter a "<< N << " els of set:\n ";
  36.     for(int i = 0; i < N; i++){
  37.         cin >> a[i][0];
  38.         a[i][1] = 1;   
  39.     }
  40. }
  41. void Ans::getOptSet(){
  42.     assert(N>=0);
  43.     for(int i = N-1; i >= 0; i--){
  44.         getOptimal(i);
  45.     }
  46.     max_ind = 0;
  47.     for(int i = 1; i < N; i++){
  48.         if(a[i][1]>a[max_ind][1]){
  49.         max_ind = i;
  50.         }
  51.     }
  52.     int curr = max_ind;
  53.     cout <<"\nOptimal set: " << a[max_ind][0] << "; ";
  54.     for(int i = curr+1; i < N; i++){
  55.         if(a[i][0]>=a[curr][0] && ((a[i][1]+1) == a[curr][1])){
  56.             cout << a[i][0] << "; ";
  57.             curr = i;
  58.             if(a[i][1] == 1)
  59.                 break;
  60.         }
  61.     }
  62. }
  63.  
  64. void Ans::getOptimal(int curr){
  65.     assert(N>=0 && curr >= 0);
  66.     int max = curr;
  67.     for(int i = N - 1; i > curr; i--){
  68.         if(a[i][0]>=a[curr][0])
  69.             if(a[i][1] >= a[max][1])
  70.                 max = i;
  71.     }
  72.     if(max != curr)
  73.         a[curr][1] += a[max][1];
  74.    
  75. }
  76.  
  77. int main(){
  78.     int N;
  79.     cout << "Enter a num of el: ";
  80.     cin >> N;
  81.     Ans a(N);
  82.     a.init();
  83.     a.getOptSet();
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement