码迷,mamicode.com
首页 > 其他好文 > 详细

ACM 动态规划 最长上升子序列(课上)

时间:2016-04-26 15:55:24      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

输入数据

 

输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N 个整数,这些整数的取值范围都在0 到10000。

 

输出要求

 

最长上升子序列的长度。

 

输入样例

7

1 7 3 5 9 4 8

输出样例

4

 

/*
    课上题目
    最长上升子序列
*/
# include <iostream>

using namespace std;
const int MAX = 1e5;

int a[MAX + 10];
int len[MAX + 10];

int main()
{
    int i, j, n;

    cin >> n;
    for(i = 1;i <= n; i++ )
        cin >> a[i];

    len[1] = 1;

    //求以第i 个数为终点的最长上升子序列的长度
    for(i = 2; i <= n; i++)
    {
        int nTmp = 0; //记录第i 个数左边子序列最大长度

        //搜索以第i 个数左边数为终点的最长上升子序列长度
        for(j = 1; j < i; j++)
        {
            if(a[i] > a[j])
            {
                if(nTmp < len[j])
                nTmp = len[j];
            }
        }
        len[i] = nTmp + 1;
    }
    int max = -1;
    for(i = 1;i <= n; i++)
    if(max < len[i])
    max = len[i];

    cout << max << endl;

    return 0;
}

 

ACM 动态规划 最长上升子序列(课上)

标签:

原文地址:http://www.cnblogs.com/lyf-acm/p/5435148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!