D. 代码填空:LIS

LIS是最长上升子序列。什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段最长严格上升的部分,它不一定要连续。

就像这样:22334477 和 22334466 就是序列 22 55 33 44 11 77 66 的两个上升子序列,最长的长度是 44

LIS模板题,再写一遍加深印象

 

#include<iostream>
#include<cstring>

using namespace std;

int f[10000], b[10000];

int lis(int n)
{
    memset(f, 0, sizeof(f));
    
    int res = 0;
    
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < i; j++)
        {
            if(b[j] < b[i])
            {
                f[i] = max(f[i], f[j] + 1);
            }
        }
        res = max(res, f[i]);
    }
    
    return res + 1;
}

int main()
{
    int n; 
    scanf("%d", &n);
    
    for(int i = 0; i < n; i++)
    {
        scanf("%d", b + i);
    }
    
    printf("%d\n", lis(n));
    
    return 0;
}

 

 

 

 

 

 

 

#include<iostream>#include<cstring>
using namespace std;
int f[10000], b[10000];
int lis(int n){    memset(f, 0, sizeof(f));        int res = 0;        for(int i = 0; i < n; i++)    {        for(int j = 0; j < i; j++)        {            if(b[j] < b[i])            {                f[i] = max(f[i], f[j] + 1);            }        }        res = max(res, f[i]);    }        return res + 1;}
int main(){    int n;     scanf("%d", &n);        for(int i = 0; i < n; i++)    {        scanf("%d", b + i);    }        printf("%d\n", lis(n));        return 0;}

 

posted @ 2018-01-23 20:02  Veritas_des_Liberty  阅读(530)  评论(0编辑  收藏  举报