这个题
#include<iostream>
#include<cstring>
using namespace std;
int n,ans;
int a[55];
int up[55],down[55];
void dfs(int u,int su,int sd)
{
if(su+sd>=ans)return;
if(u==n)
{
ans=min(ans,su+sd);
return;
}
int k=1;
while(k<=su&&up[k]>=a[u])k++;
int temp1=up[k];
up[k]=a[u];
if(k>su)dfs(u+1,su+1,sd);
else dfs(u+1,su,sd);
up[k]=temp1;
k=1;
while(k<=sd&&down[k]<=a[u])k++;
int temp2=down[k];
down[k]=a[u];
if(k>sd)dfs(u+1,su,sd+1);
else dfs(u+1,su,sd);
down[k]=temp2;
}
int main()
{
while(cin>>n&&n)
{
ans=n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
dfs(0,0,0);
cout<<ans<<endl;
}
return 0;
}