讨论 / C++题解
asfeixue 2012-05-18 16:10:00
点我顶贴 收藏 删除
#include <iostream>

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;

}

#1 dev-cpp@2012-05-18 16:10:00
回复 删除
Ti在哪儿?

T1<...<Ti>Ti+1>…>TK(1<=i<=K)中的Ti是哪里?是中间吗?

很有可能...合唱一般都是这样的...最近合唱比赛,排的队形也是中间高两边矮...

查看更多回复
提交回复