最长上升子序列模型(LIS)

基础

acwing895.最长上升子序列

题解
在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010;
int n;
int arr[N];
int f[N];

int main(){

    cin >> n;

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

    for(int i = 1; i <= n;i++){
        f[i] = 1;
        for(int j = 1;j < i;j++){
            if(arr[j] < arr[i])
                f[i] = max(f[i],f[j] + 1);
        }
    }

    int res = 0;
    for(int i = 1;i <= n;i++){
        res = max(res,f[i]);
    }
    
    cout << res << endl;

    return 0;
}

怪盗基德的滑翔翼

acwing1017.怪盗基德的滑翔翼

题解
在这里插入图片描述

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 110;
int k,n;
int arr[N],f[N];

int main(){

    cin >> k;
    while(k--){
        cin >> n;
        for(int i = 1;i <= n;i++)
            cin >> arr[i];
        int res= 0;
        //正向求解LIS
        for(int i = 1;i <= n;i++){
            f[i] = 1;
            for(int j = 1;j < i;j++) {
                if (arr[j] > arr[i]) {
                    f[i] = max(f[i], f[j] + 1);
                }
            }
            res = max(res,f[i]);
        }
        //反向求解LIS
        for(int i = n;i > 0;i--){
            f[i] = 1;
            for(int j = n;j > i;j--){
                if(arr[j] > arr[i]) {
                    f[i] = max(f[i], f[j] + 1);
                }
            }
            res = max(res,f[i]);
        }

        cout << res << endl;
    }


    return 0;
}

登山

acwing1014.登山

题解

发布了52 篇原创文章 · 获赞 5 · 访问量 2240

猜你喜欢

转载自blog.csdn.net/advjj_058229/article/details/104063844