正文

最长合法序列2007-04-14 12:42:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/24880.html

分享到:

最长合法序列  Problem description 有k个整数A[1],A[2]...A[k],你需要从前往后选出若干个数,使得每一个后面的数都要大于或等于前面的 数.例如,对于系列1,4,2,5,2,3,选出1,2,2,3是合法的,但是选出4,2,3是不合法的.请你编写程序对于一个已知系列,求出最长的合法系列的数的个数.  Input 第一行为n,表示n个测试序列; 第二行到第n+1行,每行开始第一个数为k, k后面紧跟k个数A[1],A[2] ….A[k]。  Output 输出n行,每行输出一个整数,表示相应测试序列中最长的合法序列的数的个数。  Sample Input 212 13 45 23 53 23 88 123 3 125 10 87 896 1 4 2 5 2 3 Sample Output 64 Judge Tips 其中0  Problem Source CSU 1st Contest //我的代码 #include <stdio.h>#include <stdlib.h> struct Node{ int i; int n;}; int main(){ int    nTest,i,j,k,n,m,max; struct Node *p;  scanf("%d",&nTest); for(i = 0; i < nTest; i++){  scanf("%d",&n);  p = (struct Node*)malloc(sizeof(struct Node)*n);  for(j = 0; j < n; j++){   scanf("%d",&p[j].i);   p[j].n = 1;  }  for(j = n - 1,max = 0; j >= 0; j--){   for(k = j + 1,m = 0; k < n; k ++){    if(p[j].i <= p[k].i && p[k].n > m)     m = p[k].n;   }   p[j].n += m;   if(p[j].n > max)    max = p[j].n;  }  printf("%d\n",max);  free(p); } return 0;}    

阅读(3028) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册