(闫氏dp分析法)(线性dp)(区间类dp)AcWing 895. 最长上升子序列

简介: (闫氏dp分析法)(线性dp)(区间类dp)AcWing 895. 最长上升子序列

题目链接

AcWing 895. 最长上升子序列 - AcWing

一些话

切入点

输出一个整数,表示最大长度。

区间长度类的最优解,符合dp特征(maxn)

数据范围

1≤N≤1000

1e3的数据范围,符合dp特征

流程

// 状态表示,用一维f[i]来表示以a[i]为结尾的最大上升子序列长度

            属性是最大值

// 状态计算,找最后一位不同的作为分界点

           最后一位都是a[i],相同,继续往前找

           // a[i-1],有不同,不是所有情况都包含,开始划分集合:

           a[1] ~ a[i-1]

           a[2] ~ a[i-1]

           a[3] ~ a[i-1]

           …………

           a[i-1] ~ a[i-1]

            空


           在里面找出最大值

            划分出来的这部分集合的最大值就等价于f[i-1](以a[i-1]为结尾的最大上升子序列),在前一层中可以求到


划分出来的集合


           a[1] ~ a[i-1]

           a[2] ~ a[i-1]

           a[3] ~ a[i-1]

           …………

           a[i-1] ~ a[i-1]


“空”代表的原本是a[i],所有集合减去a[i]后,原本表示a[i]的集合就变成了空


(,按照这样一直到第一层

套路

区间类的最优解dp

{

f[i]集合表示成以a[i]为结尾的区间

集合划分成不同起点到a[i-1],等价于f[i-1]来计算

}

ac代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1100;
int f[N],a[N];
int main(){
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++){
        cin >> a[i];
    }
    for(int i = 1;i <= n;i++){
        f[i] = 1;
        for(int j = 1;j < i;j++){
            if(a[j] < a[i]){
                f[i] = max(f[i],f[j] + 1);
            }
        }
    }
    int res = 0;
    for(int i = 1;i <= n;i++){
        res = max(f[i],res);
    }
    cout << res << endl;
    return 0;
}
目录
相关文章
|
小程序 JavaScript 算法
开源轻量级 IM 框架 MobileIMSDK 的微信小程序端已发布!
MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即时通讯库:
419 0
|
存储 缓存 索引
字典是怎么扩容的?它会经历哪些过程?
字典是怎么扩容的?它会经历哪些过程?
168 3
|
运维 安全 API
"揭秘阿里云无影:如何颠覆传统IT,引领未来云计算趋势的神秘力量?"
【8月更文挑战第21天】近年来,云计算深刻改变了企业的IT架构与运营模式。作为国内领先云服务商,阿里云推出的无影云电脑成为创新典范。无影是一种无需实体形态的计算服务,用户可通过终端随时随地访问云端资源。通过帮助大型制造企业实现IT基础设施统一管理、降低运维成本、保障数据安全等,以及支持初创企业低成本快速构建IT环境、按需调整资源、提高工作效率,无影展现了简化IT、提高安全性、灵活资源调配及移动办公等未来云计算趋势。
311 0
|
供应链 Python
Demand Forecasting模型解释与Python代码示例
Demand Forecasting模型解释与Python代码示例
|
存储 Java 索引
|
存储 关系型数据库 数据库
回顾数据库的三级模式,为什么比直接存文件表格好?
【6月更文挑战第10天】本文介绍数据库用于解决Excel等文件系统存在的数据冗余、不一致和访问困难等问题。DBMS中的关系有一对一、一对多、多对一和多对多四种类型。键有候选键、超级键、主键、备用键和外键等类型,功能依赖分为平凡和非平凡两种。
112 0
回顾数据库的三级模式,为什么比直接存文件表格好?
|
缓存 负载均衡 安全
探索API接口开发(定制与开发接口)
在当今数字化、互联互通的时代,API(应用程序编程接口)已经成为连接不同软件、服务和应用的关键桥梁。API接口开发,作为软件架构和系统设计的重要组成部分,不仅影响着数据交换的效率,更决定了整个系统的灵活性和可扩展性。本文将深入探讨API接口开发的各个方面,包括其重要性、开发流程、最佳实践以及面临的挑战。
|
监控 安全 关系型数据库
稳定性之故障应急处理流程
尽管可以通过稳定性体系建设,来避免出现生产系统故障。但是仍然无法彻底避免一点风险都不会产生,当稳定性风险产生后,怎么快速协调组织,缩短故障时长,科学的流程呢?
稳定性之故障应急处理流程
|
设计模式 架构师 程序员
DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道
虽然身为架构师,设计一个高质量的架构依然是复杂与困难的。 简单来说,动用大量的资源只为了一套优质的三高架构并不正确,而是该在了解当前业务现状的情况下,创造出灵活、可维护、健硕能成长的。
|
存储 缓存 Java
面试必杀技,讲一讲Spring中的循环依赖
纠正业界对循环依赖的几个错误认知,明确三级缓存的真正作用
28765 18