原题:
描述如:dabdbf最长递增子序列就是abdf,长度为4
-
输入
-
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
- 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出
-
1 3 7
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main() {
int n;
scanf("%d", &n);//循环次数
while (n--) {
char str[10001];
int dp[10001];
scanf("%s", str);
for (int i = 0; i < strlen(str); i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (str[i] > str[j])//记录每个并更新子序列的长度
dp[i] = dp[i] > dp[j] ? dp[i]:(dp[j] + 1);
}
}
sort(dp, dp + strlen(str));//调用c++库的sort函数
printf("%d\n", dp[strlen(str) - 1]);
}
return 0;
}
我自己对过程进行了一点解释,或许说得有点乱。不知道能不能帮到你们理解
假如还是不理解的话 建议去看看动态规划。 https://www.zhihu.com/question/23995189