zoj 2136 Longest Ordered Subsequence(最长上升子序列,第二次写 = =)

记得CW说还要弄个数组记录前面的子序列的终止元素的那个值 = = 然后弄了仨数组,鼓道了半天,不对。。。

 

看了以前写的,很简洁啊,理解乐 = =。。

 

求出前面小于i的那个存的长度的最大值去更新i要存的值

 

#include <stdio.h> #include <stdlib.h> #include <iostream> #include <memory.h> using namespace std; int main(void) { int ncases,n; int los[1002],max[1002]; cin >> ncases; while( ncases-- ) { cin >> n; memset(max,0,sizeof(max)); for(int i=1; i<=n; i++) cin >> los[i]; max[1] = 1; for(int i=2; i<=n; i++) { int maxl = 0; for(int k=1; k<i; k++) if( los[i] > los[k] ) { if( max[k] > maxl) maxl = max[k]; } max[i] = maxl+1; } int outputmax = 0; for(int i=1; i<=n; i++) if( max[i] > outputmax ) outputmax = max[i]; cout << outputmax << endl ; if( ncases ) cout << endl; } return 0; }  

你可能感兴趣的:(zoj 2136 Longest Ordered Subsequence(最长上升子序列,第二次写 = =))