题目:给定一串字符,求最长上升子序列长度(可以不相邻)
输入:
abcdaz
输出:
5
解题思路:定义dp[i]为前i位最长上升子序列,双重循环,字符串数组a每一位都将之前的所有位遍历判断一遍,找出比它小且最接近的dp[i]的值加上本身(+1)最后输出dp[]中最大的最大的值
#include <bits/stdc++.h>
using namespace std;
int dp[100],max1=0;
int main()
{
string a;
cin>>a;
dp[0]=1;
for(int i=1;i<a.size();i++)
{
char c=0;
int u=i;
for(int j=0;j<i;j++)
{
if(a[j]>c&&a[j]<a[i])
{
c=a[j];
u=j;
}
}
dp[i]=dp[u]+1;
}
for(int i=0;i<a.size();i++)
if(dp[i]>max1)
max1=dp[i];
cout<<max1<<endl;
return 0;
}