读书人

求数组的最长递加子序列《编程之美》

发布时间: 2012-12-22 12:05:06 作者: rapoo

求数组的最长递增子序列《编程之美》

#include<iostream>using namespace std;int main(){    extern int f(int [],int);int a[8]={1,-2,5,-3,-1,4,6,0};    int m=f(a,8);    cout<<"最长递增子序列的长度是"<<m<<endl;system("Pause");return 0;}int f(int arry[],int n){  //Lis[i]存储着以arry[i]为最后一个元素的序列(该序列是递增子序列)的长度int *Lis=new int[n];   int i=0;   for(;i<n;i++)   {     Lis[i]=1;   }   for(i=0;i<n;i++)   {     for(int j=0;j<i;j++) {  if(arry[i]>arry[j]&&Lis[i]<Lis[j]+1)//动态规划的思想,状态转移方程的程序实现步骤  Lis[i]=Lis[j]+1; }   }      int max=Lis[0];  for(int k=1;k<n;k++)  {   if(Lis[k]>max) max=Lis[k];  }  delete []Lis;  return max;}
?直接上代码了,呵呵。代码的目的是求出数组a中的最长递增子序列。参考《编程之美》后编写的代码,求出的是长度,有兴趣的朋友可以继续输出这些子序列。

读书人网 >编程

热点推荐