NYOJ-17 单调递增最长子序列

来源:互联网 发布:淘宝旺铺2016年多少钱 编辑:程序博客网 时间:2024/05/18 02:41

1.思路

用dp[i]表示以a[i]为结束的最长递增子序列,最有子结构为dp[i]=max(dp[j]+1)(a[i]>a[j],j=i~0),dp[i]默认为1,自身也是递增的。


2.代码:

复杂为O(n^2)

#include <iostream>#include <cstring>#define maxn 10009using namespace std;int main(){    int t;    char a[maxn];    int dp[maxn];    cin>>t;    while(t--){        cin>>a;        for(int i=0;i<strlen(a);i++)        {            dp[i]=1;            for(int j=i;j>=0;j--)            {                if(a[i]>a[j]){                    dp[i]=max(dp[i],dp[j]+1);                }            }        }        int Max = 0;        for(int i=0;i<strlen(a);i++)            Max=max(Max,dp[i]);        cout<<Max<<endl;    }    return 0;}


0 0
原创粉丝点击