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 ;
}
目录
相关文章
|
2月前
acwing 1010 拦截导弹
acwing 1010 拦截导弹
36 1
AcWing 1265. 数星星(每日一题)
AcWing 1265. 数星星(每日一题)
|
2月前
acwing 898 数字三角形
acwing 898 数字三角形
33 2
|
2月前
acwing 1107 魔板
acwing 1107 魔板
14 0
|
2月前
acwing 1116 马走日
acwing 1116 马走日
15 0
|
2月前
acwing 188 武士风度的牛
acwing 188 武士风度的牛
12 0
|
2月前
acwing 285. 没有上司的舞会
acwing 285. 没有上司的舞会
20 0
|
2月前
acwing 1017 怪盗基德的滑翔翼
acwing 1017 怪盗基德的滑翔翼
35 0
|
2月前
acwing 1012 友好城市
acwing 1012 友好城市
17 0
AcWing 562. 壁画(每日一题)
AcWing 562. 壁画(每日一题)