1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol video solution AI分析

思路(经典 O(n2)O(n^2)O(n2) 动态规划 + 前驱重构)

定义状态:dp[i]dp[i]dp[i] 表示以位置 iii 结尾的严格上升子序列的最大长度。 转移方程: dp[i]=1+max⁡dp[j]∣0≤j<i,aj<aidp[i]=1+\max{dp[j]\mid 0\le j<i,a_j<a_i}dp[i]=1+maxdp[j]∣0≤j<i,aj​<ai​,若不存在满足条件的 jjj,则 dp[i]=1dp[i]=1dp[i]=1。 为重构具体方案,额外维护前驱数组prev[i]prev[i]prev[i]为达到最优 dp[i]dp[i]dp[i] 时所接续的前一个下标,若 dp[i]=1dp[i]=1dp[i]=1 则 prev[i]=−1prev[i]=-1prev[i]=−1。

实现要点:

P3901.最长上升子序列(具体方案)

    1000ms Tried: 217 Accepted: 40 Difficulty: 4
    算法与标签>动态规划

题目描述

给定一个长度为 nnn 的整数序列 a1,a2,…,ana_1,a_2,\dots,a_na1​,a2​,…,an​,请你求出该序列的最长上升子序列(LIS)及其长度。 这里的上升指严格上升:即子序列中每个元素都严格大于它前一个元素。

输入描述

  • 第一行包含一个整数 n (1≤n≤1000)n \ (1 \leq n \leq 1000)n (1≤n≤1000),表示序列的长度。
  • 第二行包含 nnn 个整数 a1,a2,…,an (1≤ai≤109)a_1, a_2, \dots, a_n \ (1 \leq a_i \leq 10^9)a1​,a2​,…,an​ (1≤ai​≤109),表示序列中的元素。

输出描述

  • 第一行输出一个整数 LLL,表示最长上升子序列的长度。
  • 第二行输出 LLL 个整数,表示你找到的一组最长上升子序列。 (若存在多个方案,输出任意一组即可。)

样例输入

6
10 9 2 5 3 7

样例输出

3
2 5 7

说明

在样例中,最长上升子序列可以是 [2,5,7][2, 5, 7][2,5,7],其长度为 333。 其他等长方案(如 [2,3,7][2, 3, 7][2,3,7])同样正确。

开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 0, 185ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?