#include using namespace std; int a[101] = {0}; int dp1[101] = {0}; int dp2[101] = {0}; int main() { //输入+输出重定向 freopen("../1282.txt", "r", stdin); //动态规则 int n; cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; } //从左到右 for (int i = 1; i <= n; i++) { //遍历每一个元素 dp1[i] = 1; //以这个元素结尾的dp数组,默认值是1,即表示只有它自己一个 for (int j = 1; j < i; j++) { //从比它小的每一个数都过来计算一次 //找到比当前元素小的,并且以那个元素结尾的最长子序列长度+1比现在的大,就是猴子选大王,找最长的一条 if (a[j] < a[i] && dp1[j] + 1 > dp1[i]) { dp1[i] = dp1[j] + 1; } } } //从右到左 for (int i = 1; i <= n; i++) { //遍历每一个元素 dp2[i] = 1; for (int j = 1; j < i; j++) { if (a[j] > a[i] && dp2[j] + 1 > dp2[i]) { dp2[i] = dp2[j] + 1; } } } int bigCount = 0; for (int i = 0; i < n; i++) { bigCount = max(bigCount, dp1[i] + dp2[i] - 1); } cout << bigCount << endl; //关闭文件 fclose(stdin); return 0; }