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

单调递增最长子序列

来源:NYOJ
标签:动态规划、字符串
参考资料:
相似题目:http://blog.csdn.net/wingrez/article/details/78136976

题目

求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4

输入

第一行一个整数0< n< 20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000

输出

输出字符串的最长递增子序列的长度

输入样例

3
aaa
ababc
abklmncdefg

输出样例

1
3
7

解题思路

利用动态规划思想,设dp[i]为以str[i]结尾的单调递增最长子序列。

参考代码

#include
#include
#include
#define MAXN 100005
using namespace std;
char str[MAXN];
int dp[MAXN];
int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		scanf("%s",str);
		int len=strlen(str);
		int ans=0;
		for(int i=0;i<len;i++){
			dp[i]=1;
			for(int j=0;j<i;j++){
				if(str[j]<str[i]){
					dp[i]=max(dp[i],dp[j]+1);
				}
			}
			ans=max(ans,dp[i]);
		}
		printf("%d\n",ans);
	}
	return 0;
}

你可能感兴趣的:(【记录】算法题解)