给 定 一 串 长 度 为 n 的 数 字 ( 只 含 1 和 2 ) , 你 可 以 翻 转 任 意 区 间 。 给定一串长度为n的数字(只含1和2),你可以翻转任意区间。 给定一串长度为n的数字(只含1和2),你可以翻转任意区间。
问 若 干 次 操 作 后 最 长 不 下 降 子 序 列 的 长 度 。 问若干次操作后最长不下降子序列的长度。 问若干次操作后最长不下降子序列的长度。
d p [ i ] [ j ] 表 示 区 间 [ 1 , i ] 以 第 j 种 形 式 ( 1111 , 1122 , 2211 , 2222 ) 出 现 时 的 最 长 不 下 降 子 序 列 长 度 。 dp[i][j]表示区间[1,i]以第j种形式(1111,1122,2211,2222)出现时的最长不下降子序列长度。 dp[i][j]表示区间[1,i]以第j种形式(1111,1122,2211,2222)出现时的最长不下降子序列长度。
#include
using namespace std;
const int N = 2001;
int dp[N][5];
int main() {
int n, x;
cin >> n;
for(int i = 1 ; i <= n ; i++){
cin >> x;
for(int j = 1 ; j <= 4 ; j++){
dp[i][j] = max(dp[i-1][j]+(x == 1+(j-1)%2), dp[i][j-1]);
}
}
cout << dp[n][4] << endl;
return 0;
}