本文主要是介绍NYOJ 17 单调递增最长子序列(动态规划),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
描述
-
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4-
输入
-
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 -
输出
-
输出字符串的最长递增子序列的长度
-
样例输入
-
3 aaa ababc abklmncdefg
-
样例输出
-
1 3
7
-
#include<iostream>
#include<cstring>using namespace std;int dp[10000];
char s[10000];int SubSeq(char *s, int len)
{int i,j,ans,max;ans=0;for(i=0;i<len;i++){max=0;for(j=i-1;j>=0;j--){if(s[j]<s[i])if(max<dp[j])max=dp[j];}dp[i]=max+1;if(ans<dp[i])ans=dp[i];}return ans;
}int main()
{int n,m;cin >> n;;while(n--){cin>>s;m=strlen(s);memset(dp,0,sizeof(dp));cout << SubSeq(s,m)<<endl;}return 0;
}
这篇关于NYOJ 17 单调递增最长子序列(动态规划)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!