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

来源:互联网 发布:淘宝双11充值红包退款 编辑:程序博客网 时间:2024/05/17 04:45

点击打开链接

单调递增最长子序列

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

动态规划的题,很久以前做的,感觉和前面的矩阵嵌套基本一样,假设循环到第i个字符,那么向前找到第j个字符似的j字符小于i字符,那么dp[i] = dp[j] + 1;并且在这个循环中记录最大值:

 #include<stdio.h>#include<string.h>int dp[10001];char str[10001];int max;int main(){int num;scanf("%d" , &num);getchar();while(num--){gets(str);int i , j;max = 1;//for(i = 0 ; str[i] ; i++)//dp[i] = 1;memset(dp , 0 , sizeof(dp));for(i = 0 ; str[i] ; i++){for(j = i - 1 ; j >= 0 ; j--){if(str[j] < str[i] && dp[i] < dp[j] + 1){dp[i] = dp[j] + 1;if(max < dp[i])max = dp[i];}}if(dp[i] == 0)dp[i] = 1;}printf("%d\n" , max);}return 0;}        


原创粉丝点击