E03 线性DP B3637 最长上升子序列

E03 线性DP 最长上升子序列_哔哩哔哩_bilibili

 

B3637 最长上升子序列 - 洛谷

状态:$f_{i}$ 表示以 $a_i$ 为结尾的最长上升子序列的长度。
方程:$f_i=max_{1\leq j<i,a_j < a_i}(f_j+1)$
初值:$f_i=1$
答案:$max_{1\leq i \leq n}f_i$

// 线性DP O(n^2)
#include<bits/stdc++.h>
using namespace std;

const int N=5010;
int n,a[N],ans;
int f[N]; //f[i]表示以 a[i] 结尾的最长上升子序列的长度

int main(){
  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);
    }
    ans=max(ans,f[i]);
  }
  cout<<ans;
}

 

P4309 [TJOI2013] 最长上升子序列 - 洛谷

P4484 [BJWC2018] 最长上升子序列 - 洛谷

P3774 [CTSC2017] 最长上升子序列 - 洛谷

posted @ 2023-04-09 22:24  董晓  阅读(1160)  评论(0)    收藏  举报