AOJ 189 最长递增子序列(DP)
2012-04-08 16:39
323 查看
单调递增最长子序列
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入
3 aaa ababc abklmncdefg
样例输出
1 3 7
Accepted
#include<stdio.h> int length(char * s) { int len[128] = {0}, i, t; for(; *s != '\0' && (t = len[*s - 1] + 1); s++) for(i = *s; i < 128 && len[i] < t; len[i++] = t); return len[127]; } int main() { int n; char s[10001]; for(scanf("%d\n", &n); n--;) printf("%d\n", length(gets(s))); return 0; }
还待好好研究研究。有IOCCC的风格啊
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/proud.gif)
2、http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=189
#include <iostream> #include <cstring> using namespace std; #define MAXNUM 7005 int aMaxlen[MAXNUM]; // aMaxlen[]是备忘录 unsigned int array[MAXNUM]; unsigned int Maxlen(const int n) // Maxlen(n)是 以array 为末元素的所有递增子序列 中长度最长的列的长度 { if( n == 1 ) return 1; int i; for(i = 1; i < n; i++) { if (aMaxlen[i] == -1) aMaxlen[i] = Maxlen(i); } int maxlen_i = 0; // maxlen_i是以array[i]为末元素的递增子序列中长度最长的列的长度,且array[i] < array for(i = 1; i < n; i++) { if( array[i] < array && aMaxlen[i] > maxlen_i ) maxlen_i = aMaxlen[i]; } if( maxlen_i == 0 ) // maxlen_i没变,则array 最小(前面找不到比它小的) return 1; // 故以array 为末元素的递增子序列就是它自己 return maxlen_i + 1; } int SearchMax(int size) { int max = 0; for (int i = 1; i <= size; i++) { if (aMaxlen[i] > max) max = aMaxlen[i]; } return max; } int main(void) { // freopen("cin.txt", "r", stdin); int N; while(cin >> N) { memset(aMaxlen, -1, sizeof(aMaxlen)); for(int i = 1; i <= N; i++) cin >> array[i]; aMaxlen = Maxlen(N); cout << SearchMax(N) << endl; } return 0; }
相关文章推荐
- AOJ 497 最长递增子序列 【DP】
- AOJ-AHU-OJ-189 最长递增子序列(DFS)
- dp求数列最长递增子序列长度
- 最长递增公共子序列dp(hdu 1423 hdu 4512)
- 51nod 1376 最长递增子序列的数量(dp、CDQ分治 | BIT)
- UVa 10534 Wavio Sequence ( DP 二分 最长递增子序列 )
- POJ 2533 Longest Ordered Subsequence (DP,最长递增序列)
- hdu 1087 Super Jumping! Jumping! Jumping!(dp+最长递增序列)
- 51nod 1218 最长递增子序列 V2 [dp]
- UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)
- DP之最长递增序列(利用二分查找,复杂度为nlgn)
- hdu 1087 Super Jumping! Jumping! Jumping!(dp+最长递增序列)
- 51NOd 1134 最长递增子序列(dp)
- Hrbust 1835 最长递增子序列(dp)
- AOJ-AHU-OJ-189 最长递增子序列(模拟+二分查找)
- hdu4513 最长递增回文序列 manacher + dp
- 51NOD 1376 最长递增子序列的数量 dp+BIT
- POJ 2533 Longest Ordered Subsequence【最长递增子序列】【DP思想】
- [swust 1741] 最长递增子序列问题(DP,最大流)
- dp经典之最长递增子序列长度问题