zoj 2136 Longest Ordered Subsequence(DP经典~)

求最长上升子序列滴~~~~~

 

我大致理解啦~~~

 

比如给一列数字 1 7 3 5 9 4 8

 

就是先求以每个数字为上升子序列的终点。比如5为终点的话,要算5的左边比5小的数(比如3)结尾的上升子序列的长度,然后再加一就是以5结尾的上升子序列的长度。。。哇。。真拗口。。就这样从第一个数开始算。。。建立后一个数与前一个序列的关系~~~~

 

呵呵,本来自己还不是太理解,自己这么一写,豁然开朗~~~~哈哈~~~~~

 

#include <stdio.h> #include <stdlib.h> int main(void) { int n,maxl,i,j,ncases; int s[1003],max[1003],result; scanf("%d",&ncases); while(ncases--) { scanf("%d",&n); result = 0; for(i=1; i<=n; i++) scanf("%d",&s[i]); max[1] = 1; for(i=2; i<=n; i++) { maxl = 0; for(j=1; j<i; j++) { if(s[i] > s[j]) { if(maxl < max[j]) maxl = max[j]; } } max[i] = maxl +1; } for(i=1; i<=n; i++) if(max[i] > result) result = max[i]; printf("%d/n",result); if(ncases) printf("/n"); } system("pause"); return 0; }

你可能感兴趣的:(zoj 2136 Longest Ordered Subsequence(DP经典~))