i got the code for this problem but not able to find where i am wrong
my problem is as follows
Given an array of numbers, find the longest subsequence whose elements grow monotonically:
1 4 8 2 5 7 3 6 => 1 4 5 7
1 4 8 2 5 7 3 6 7 => 1 4 5 6 7
1 4 8 2 3 7 4 6 => 1 2 3 4 6
that is we must form subsets and find which is longest among them
as showed in the above example
Code:#include<iostream.h> #include<conio.h> int maxRank (int curr, int* arr, int* rank) { int max = 0 ; for (int i = 0; i <= curr; i++) { if (arr[i]<arr[curr] && rank[i]>rank[max]) { max = i ; } } return max ; } void printReverse (int curr, int* arr, int* back) { if (curr == 0) return ; printReverse (back[curr], arr, back) ; cout << arr[curr] << " " ; } void longestMonotoneSubsequence (int count, int* arr) { int* back = new int[count] ; int* rank = new int[count] ; int max = 0 ; rank[0] = 0, back[0] = 0 ; for (int i = 0; i <= count; i++) { back[i] = maxRank (i, arr, rank) ; rank[i] = rank[back[i]]+1 ; if (rank[i] > rank[max]) { max = i ; } } printReverse (max, arr, back) ; cout << "\n" ; delete rank, back ; } void main() { int n; int a[100]; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } longestMonotoneSubsequence(n,&a); }



LinkBack URL
About LinkBacks



