#include<iostream> usingnamespace std; constint maxn = 1e2 + 50; int n, missile[maxn], ascend[maxn], descend[maxn];
// 最多几个序列总数,当前下标,上升序列个数,下降序列个数 booldfs(int depth, int now, int p, int q){ // 迭代加深,控制最大序列总数 if (p + q > depth) returnfalse; if (now == n) returntrue; // 已有上升序列中,能不能插进去 bool flag = 0; for (int i = 1; i <= p; ++i) { if (missile[now] > ascend[i]) { flag = 1; int t = ascend[i]; ascend[i] = missile[now]; if (dfs(depth, now + 1, p, q)) return1; ascend[i] = t; break; } } // 已有的上升序列插不进去,那就新建 if (!flag) { ascend[p + 1] = missile[now]; if (dfs(depth, now + 1, p + 1, q)) return1; } // 已有的下降序列中,能不能插进去 flag = 0; for (int i = 1; i <= q; ++i) { if (missile[now] < descend[i]) { flag = 1; int t = descend[i]; descend[i] = missile[now]; if (dfs(depth, now + 1, p, q)) return1; descend[i] = t; break; } } // 已有的下降序列插不进去,那就新建 if (!flag) { descend[q + 1] = missile[now]; if (dfs(depth, now + 1, p, q + 1)) return1; } return0; }
intmain(){ while (cin >> n && n) { for (int i = 0; i < n; ++i) cin >> missile[i]; int depth = 0; while (!dfs(depth, 0, 0, 0)) ++depth; cout << depth << endl; } return0; }