单调递增最长子序列

来源:互联网 发布:淘宝文案模板 编辑:程序博客网 时间:2024/06/08 02:51

原题:

描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3aaaababcabklmncdefg
样例输出
137

#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






0 0
原创粉丝点击