NYOJ 17-单调递增最长子序列
2013-07-22 01:31
274 查看
点击打开链接
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
样例输出
动态规划的题,很久以前做的,感觉和前面的矩阵嵌套基本一样,假设循环到第i个字符,那么向前找到第j个字符似的j字符小于i字符,那么dp[i] = dp[j] + 1;并且在这个循环中记录最大值:
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
3 aaa ababc abklmncdefg
样例输出
1 3 7
动态规划的题,很久以前做的,感觉和前面的矩阵嵌套基本一样,假设循环到第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; }
相关文章推荐
- nyoj 17 单调递增最长子序列 【LIS】
- 单调递增最长子序列 (NYOJ 17) [动态规划]
- NYOJ 17 单调递增最长子序列
- NYOJ_17_单调递增最长子序列
- NYOJ17 单调递增最长子序列(动态规划)
- nyoj 17 单调递增最长子序列
- NYOJ 17 单调递增最长子序列(LIS)
- NYOJ 题目17 单调递增最长子序列 (DP)
- NYOJ 17 单调递增最长子序列
- nyoj-17 单调递增最长子序列
- NYOJ 17 单调递增最长子序列
- 单调递增最长子序列 nyoj 17
- NYOJ-17 单调递增最长子序列
- NYOJ 17 单调递增最长子序列
- nyoj17 单调递增最长子序列
- nyoj_17 单调递增最长子序列
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
- NYOJ17-单调递增最长子序列
- NYOJ 题目17 单调递增最长子序列 (DP) hdu 题目2845 Bean
- NYOJ 17 单调递增最长子序列(DP)