using namespace std;
typedef struct T
{
int Ti; //身高
int num; //满足条件的个数
int n[100]; //存放符合条件的数的位置
};
int main()
{
int N;
cin>>N;
T t[101];
for(int i=1;i<=N;i++)
{
cin>>t[i].Ti;
t[i].num=0;
} //初始化数据
for(int i=N;i>=1;i--)
for(int j=i-1;j>=1;j--)
if(t[i].Ti>t[j].Ti)
t[i].n[t[i].num++]=j; //比所在位置小的左边的数的位置
int opt[101]={0};
for(int i=1;i<=N;i++)
for(int j=0;j<t[i].num;j++)
if(opt[t[i].n[j]]+1>opt[i])
opt[i]=opt[t[i].n[j]]+1; //求出递增下个数分布
for(int i=N;i>=1;i--)
{
t[i].num=0;
for(int j=i+1;j<=N;j++)
if(t[i].Ti>t[j].Ti)
t[i].n[t[i].num++]=j; //比所在位置小的右边的数的位置
}
int opt1[101]={0};
for(int i=N;i>=1;i--)
for(int j=0;j<t[i].num;j++)
if(opt1[t[i].n[j]]+1>opt1[i])
opt1[i]=opt1[t[i].n[j]]+1; //求出递减下的个数分布
int max=0;
for(int i=1;i<=N;i++)
if(opt[i]+opt1[i]>max)
max=opt[i]+opt1[i];
cout<<N-(max+1)<<endl;
return 0;
}
T1<...<Ti>Ti+1>…>TK(1<=i<=K)中的Ti是哪里?是中间吗?
很有可能...合唱一般都是这样的...最近合唱比赛,排的队形也是中间高两边矮...
