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

来源:互联网 发布:镜片种类知乎 编辑:程序博客网 时间:2024/04/27 18:40

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;
}

0 0
原创粉丝点击