您的位置:首页 > 其它

华为OJ训练-合唱团

2017-06-06 10:30 211 查看
思路参考的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为oj