您的位置:首页 > 其它

动态规划练习一—1最长上升子序列

2017-04-17 21:14 190 查看
1、题意:对于输入的数组,输出其上升子序列最长的长度

2、思路:对开始到结束,储存当前位置为子序列最后一位时最长的长度,当其位置最长长度为前一个比当前位置数值小的位置的长度+1;

3、感想:此题老师上课讲过,但是自己做的动态规划第一题,是思维打开的开端,比较易接受。

4、代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{

    int n,i,j,max,line[1002],a[1002];

    scanf("%d",&n);line[0]=0;

    for(i=1;i<=n;i++)

    scanf("%d",&a[i]);

    line[1]=1;

    for(i=2;i<=n;i++)

    {max=0;

    for(j=1;j<i;j++)

    {if(a[i]>a[j])

    {if(max<line[j]) max=line[j];}}

    line[i]=max+1;}

    sort(line,line+n+1);

    printf("%d\n",line[n]);

    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: