acwing 1014 登山

简介: acwing 1014 登山

活动 - AcWing

从头找一遍最长上升子序列,从后往前再找一遍,记录每一个点的最长上子序列的长度,最后让他们对应相加再减去1 ;

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 1010 ;
int f[N] ;
int dp[N] ;
int n ;
int a[N] ;
int b[N] ;
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) ;
    }
  }
  for(int i = 1 ; i <= n ; i++) b[i] = a[n-i+1] ;
  for(int i = 1 ;  i<= n ; i++){
    dp[i] = 1 ;
    for(int j = 1 ; j <i ; j++){
      if(b[j] < b[i]) dp[i] = max(dp[i],dp[j] + 1) ;
    }
  }
  int res = 0 ;
  for(int i = 1 ; i <= n ; i++) {
    //cout << f[i] << " " << dp[n-i+1] << endl ;
    res = max(res,dp[n-i+1] + f[i] - 1) ;
  }
  cout << res  << endl ;
}
相关文章
lanqiaoOJ 563 采药
lanqiaoOJ 563 采药
lanqiaoOJ 1456 括号序列
lanqiaoOJ 1456 括号序列
lanqiaoOJ 2110 积木画
lanqiaoOJ 2110 积木画
lanqiaoOJ 2148 数组切分
lanqiaoOJ 2148 数组切分
|
11小时前
acwing272. 最长公共上升子序列
acwing272. 最长公共上升子序列
|
12小时前
acwing139. 回文子串的最大长度
acwing139. 回文子串的最大长度
|
12小时前
acwing 841 字符串哈希
acwing 841 字符串哈希
|
12小时前
940 C. How Does the Rook Move?(dp)
940 C. How Does the Rook Move?(dp)
|
12小时前
acwing 1016 最大上升子序列和
acwing 1016 最大上升子序列和
|
12小时前
acwing 1012 友好城市
acwing 1012 友好城市