题目地址:
http://acm.nyist.net/JudgeOnline/problem.php?pid=17
题目内容:
描述 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4 输入- 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出- 输出字符串的最长递增子序列的长度
样例输入3
aaa
ababc
abklmncdefg
样例输出1 3 7
代码如下:
#include<iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
string str;
int count = 1;
cin >> str;
int a[200];
a[0] = -999;
for (int i = 0;i < str.length();i++)
{
for (int j = count - 1;j >= 0;j--)
{
if ((int)str[i] > a[j])
{
a[j + 1] = str[i];
if (j + 1 == count) count++;
break;
}
}
}
cout << count - 1 << endl;
}
return 0;
}
注1:以上代码只能求出单调递增最长子序列的长度,如果需要输出最长单调递增最长子序列,需要对代码做点改动。
注2:代码来自网上。
代码分析:自己做了几遍,都是超时,看完这个代码后,发现其实自己理解错题目的意思了,所以做的才会有问题,想的太多了。
自以为思路清晰,其实思路混乱,还要改进,多做题,多和高手交流。