计算机算法设计与分析 最长递增子序列

求一个字符串的最长递增子序列的长度。设计基于动态规划思想的算法。
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0 样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7

根据题意,到当前位置的最长递增子序列为前面的比当前位置小的最长子序列加一,所以暴力即可,从头遍历整个字符串,每次检验前面的符合大小条件的最大子串,取最大值,最后找出dp数组中最大的数据即可。

代码如下:

#include
using namespace std;
int dp[10005];
int main()
{
	int m;
	scanf("%d",&m);
	while(m--)
	{
		memset(dp,0,sizeof(dp));
		string str;
		int ans=-1;
		cin>>str;
		for(int i=0;istr[j])
					dp[i]=max(dp[i],dp[j]+1);
			}
			ans=max(dp[i],ans);
		}
		printf("%d\n",ans);
	}
	return 0;
 }

你可能感兴趣的:(计算机算法设计与分析)