Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "iostream"
- #include "assert.h"
- using namespace std;
- class Ans{
- private:
- int **a;
- int max_ind;
- int N;
- public:
- Ans();
- Ans(int);
- void init();
- void getOptSet();
- void getOptimal(int);
- };
- Ans::Ans():
- a(NULL), max_ind(-1){}
- Ans::Ans(int N){
- assert(N>=0);
- a = new int*[N];
- assert(a);
- for(int i = 0; i < N; i++){
- a[i] = new int[2];
- assert(a[i]);
- }
- this->N = N;
- }
- void Ans::init(){
- assert(N>=0);
- cout << "Enter a "<< N << " els of set:\n ";
- for(int i = 0; i < N; i++){
- cin >> a[i][0];
- a[i][1] = 1;
- }
- }
- void Ans::getOptSet(){
- assert(N>=0);
- for(int i = N-1; i >= 0; i--){
- getOptimal(i);
- }
- max_ind = 0;
- for(int i = 1; i < N; i++){
- if(a[i][1]>a[max_ind][1]){
- max_ind = i;
- }
- }
- int curr = max_ind;
- cout <<"\nOptimal set: " << a[max_ind][0] << "; ";
- for(int i = curr+1; i < N; i++){
- if(a[i][0]>=a[curr][0] && ((a[i][1]+1) == a[curr][1])){
- cout << a[i][0] << "; ";
- curr = i;
- if(a[i][1] == 1)
- break;
- }
- }
- }
- void Ans::getOptimal(int curr){
- assert(N>=0 && curr >= 0);
- int max = curr;
- for(int i = N - 1; i > curr; i--){
- if(a[i][0]>=a[curr][0])
- if(a[i][1] >= a[max][1])
- max = i;
- }
- if(max != curr)
- a[curr][1] += a[max][1];
- }
- int main(){
- int N;
- cout << "Enter a num of el: ";
- cin >> N;
- Ans a(N);
- a.init();
- a.getOptSet();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement