华为OJ训练-合唱团

思路参考的http://blog.csdn.net/xmh1954/article/details/34422349?utm_source=tuicool&utm_medium=referral

发此文,主要是存下自己代码。

#include <iostream>

int main()
{
	using namespace std;
	unsigned int u32_StuNum = 0 ; // 存学生人数
	cin >> u32_StuNum ;
	if (u32_StuNum == 0 ) // 若学生人数为0 ,则直接退出。
	{
		return 1;
	}
	unsigned int * p_InputStuHeightData = new unsigned int[u32_StuNum]; // 存学生的身高信息。
	unsigned int * p_StuLeft  = new unsigned int[u32_StuNum]; // 存某个位置学生左侧上升升高最大人数
	unsigned int * p_StuRight = new unsigned int[u32_StuNum]; // 存某个位置学生右侧上升升高最大人数
	if ( ( p_InputStuHeightData == NULL )|| ( p_StuLeft == NULL )|| ( p_StuRight == NULL ) ) // 若内存申请失败则直接退出。
	{
		return 1;
	}
	int i = 0 ;
	for ( i = 0 ; i < u32_StuNum ; i++ ) // 存输入身高信息
	{
		cin >> p_InputStuHeightData[i] ;
	}
	for ( i = 0 ; i < u32_StuNum ; i++) // 左侧
	{
		p_StuLeft[i] = 1; // 至少一个(自己)
		for (int j = i ; j > 0 ; j-- )
		{
			if ( (p_InputStuHeightData[i] > p_InputStuHeightData[j]) && ( p_StuLeft[i]-1 < p_StuLeft[j] ) ) // 逐个向左侧遍历,如果遇到左侧比自己矮的,则比较当前自己现有最大人数是否比他大1以上
																   // 取较大值更新为自己的最大上升人数。
			{
				p_StuLeft[i] = p_StuLeft[j]+1;
			}
		}
	}
	for ( i = u32_StuNum-1 ; i >= 0 ; i--) // 右侧
	{
		p_StuRight[i] = 1; // 至少一个(自己)
		for (int j = i ; j < u32_StuNum ; j++ )
		{
			if ( (p_InputStuHeightData[i] > p_InputStuHeightData[j]) && ( p_StuRight[i]-1 < p_StuRight[j] ) ) // 逐个向右侧遍历,如果遇到右侧比自己矮的,则比较当前自己现有最大人数是否比他大1以上
				// 取较大值更新为自己的最大上升人数。
			{
				p_StuRight[i] = p_StuRight[j]+1;
			}
		}
	}
	unsigned int u32_StuOutNum = 0; 
	for ( i = 0 ; i < u32_StuNum ; i++)
	{
		cout << p_InputStuHeightData[i] << "  " << p_StuLeft[i] << "  " << p_StuRight[i] << endl ;
		u32_StuOutNum =  (p_StuRight[i]+p_StuLeft[i] > u32_StuOutNum ) ? p_StuRight[i]+p_StuLeft[i] : u32_StuOutNum;
	}
	cout << (u32_StuNum + 1 - u32_StuOutNum) << endl;
	delete [] p_InputStuHeightData ;
	delete [] p_StuLeft ;
	delete [] p_StuRight ;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值