POJ 2533 LIS

来源:互联网 发布:医院网络解决方案 编辑:程序博客网 时间:2024/05/22 11:58

题目大意:找出所给序列的最长上升子序列。

算法思想:

        采用动态规划的思想,用dp[i]记录到第i个元素的最长上升子序列的长度,状态转移方程为 dp[i]=max(dp[j](1<=j<i))+1。

代码如下:

    

#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int MAXN=10000;int a[MAXN];int dp[MAXN];int LIS(int a[],int N){    int m;    int ans=1;    dp[1]=1;    for(int i=2;i<=N;i++){        m=0;        for(int j=1;j<i;j++){             if(a[i]>a[j]&&dp[j]>m)//找出小于a[i]的最大的dp[j];             {                 m=dp[j];             }        }        dp[i]=m+1;        ans=max(ans,dp[i]);     }    return ans;}int main(){    int N;    while(cin>>N){        for(int i=1;i<=N;i++){            cin>>a[i];        }        cout<<LIS(a,N)<<endl;    }    return 0;}


0 0
原创粉丝点击