无序数组中最长非降子序列长度

来源:互联网 发布:域名对企业的意义 编辑:程序博客网 时间:2024/06/05 10:48

求无序整型数组中最长非降子序列的长度。

例如:数组 array[12]={8,9,1,100,2,3,4,5,1001,5,200,1000}中最长非降子序列为:1,2,3,4,5,5,200,1000。长度为8。


解法:动态规划

状态转移方程:dp[i]=1                           (array[i]小于前面的所有元素时)

                         dp[i]=max(dp[j])+1         (0<=j<=i-1 && array[i]>=array[j])。

dp[i]中存的是以array[i]结尾的最长非降子序列的长度。


#include<iostream>#include<string.h>int MaxLength(int array[],int length);int main(){  int array[12]={8,9,1,100,2,3,4,5,1001,5,200,1000};  int maxLength=MaxLength(array,12);  std::cout<<maxLength<<std::endl;  return 0;}int MaxLength(int array[],int length){  if(array == NULL || length <= 0) return -1;  int result = 0;  int maxLen = 0;  int dp[length];  memset(dp,0,sizeof(int)*length);  dp[0] = 1;  for(int i=1;i < length;i++)  {    maxLen=0;    for(int j=i-1;j>=0;j--)    {      if(array[i]>=array[j] && dp[j]>maxLen)      {        maxLen=dp[j];      }    }    dp[i] = maxLen + 1;    if(result<dp[i])    {      result = dp[i];    }  }  return result;}


0 0
原创粉丝点击