Tyvj 1049 最长不下降子序列

Tyvj 1049 最长不下降子序列

经典的最长不下降子序列问题,O(n^2)【还存在基于二分查找的O(nlogn)算法】

方程:if(a[j]<=a[i]) f[i] = max{f[j]} (0<j<i, 1<i<=n)

可能是今天状态不好,一直在纠缠细节.需要注意的是,子序列长度的最大值不一定在f[n]中.

 1 #include < iostream >
 2 using   namespace  std;
 3 int  a[ 5001 ], b[ 5001 ];
 4 int  max( int  x,  int  y)  {return (x > y) ? x : y;}
 5 int  main()
 6 {
 7    int i, j, n, ans;
 8    cin >> n;
 9    for (i = 1; i <= n; i++{cin >> a[i]; b[i] = 1;}
10    for (i = 2; i <= n; i++)
11    {
12        for (j = 1; j < i; j++)
13            if (a[j] <= a[i] && b[j]+1 > b[i])
14                b[i] = b[j]+1;
15    }

16    for (i = 1; i <= n; i++
17        if (ans < b[i]) ans = b[i];
18    cout << ans << endl;
19}

20


马上要走了,高中还是麻烦很多,进度让人纠结.

你可能感兴趣的:(Tyvj 1049 最长不下降子序列)