最长上升子序列

柔光的暖阳◎ 2022-06-15 09:52 432阅读 0赞

严格上升和非严格上升的

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int i, j, n, max;
  6. int a[1001];
  7. int d[1001]; /* d[i]表示以a[i]结尾的最长子序列长度 */
  8. while(cin >> n)
  9. {
  10. for (i = 1; i <= n; i++)
  11. cin >> a[i];
  12. max = 0;
  13. d[1]=1;
  14. for (i = 2; i <= n; i++)
  15. {
  16. d[i] = 1;
  17. for (j = 1; j <=i-1; j++)
  18. {
  19. if (a[j] < a[i] && d[i] < d[j] + 1)//如果a[j]<=a[i]的话就不是严格单调上升的,而是非降序的了
  20. {
  21. d[i] = d[j] + 1;
  22. }
  23. }
  24. if (d[i] > max)
  25. max = d[i];
  26. }
  27. cout << max << endl;
  28. }
  29. return 0;
  30. }

发表评论

表情:
评论列表 (有 0 条评论,432人围观)

还没有评论,来说两句吧...

相关阅读

    相关 上升序列

    Problem Description 一个数的序列bi,当b 1 < b 2 < ... < b S的时候,我们称这个序列是上升的。对于给定的一个序列(a 1, a 2