题目大意:给你一个字符串,你要从里边找到最长的子串的长度,且这个子串必须是升序。
解题思路:DP
状态变量:d[i]以i结尾的最长上升子串的长度
状态转移方程:d[i]=max(d[i],d[j]+1) j<i,且A[j]<A[i]
边界:全初始化为1,因为每一个单独的字符都是一个子串
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=10000+100;
int A[maxn],d[maxn];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>A[i];
d[i]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
{
if(A[i]>A[j]) d[i]=max(d[i],d[j]+1);
}
int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,d[i]);
cout<<ans<<endl;
}