1

I have written the following recursive structure for finding length of longest increasing subsequence.

int lis(int arr[],int n,int k,int prev)  //k=0 (pointing to start)
{                                   //prev=0 (value of prev element included in subsequence)
    if(k==n)    return 0;
    int res;
    if(arr[k]>=prev)   res=max(1+lis(arr,n,k+1,arr[k]),lis(arr,n,k+1,prev));
    else               res=lis(arr,n,k+1,prev);
    return res;
}

1.So, firstly I check whether that element is greater than prev element or not. If it is greater then there are two recursive calls-

a) In first call that element is included and I send that element as prev in the next call and

b) in second call that element is not included in the subsequence.

2.If it is less than prev element than I simply don't include that element and proceed further.

I am trying to write the top-down approach (DP) for this. It cannot be written using 1-d array because it depends on value of k and previous values in the subsequence. How can I write the top to down approach for this?

I read an article on lis on GeeksForGeeks and found a different recursive structure for this problem.

But, I want to know that Can every recursive solution be written into top-down approach (DP) or do I have to find recursive solution (there can be more than one recursive solutions for a problem I think..) such that it follows optimal substructure property?

shiwang
  • 481
  • 1
  • 9
  • 24

0 Answers0