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 10009
using 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;
}