华为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;
}
发此文,主要是存下自己代码。
#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训练之0006-161229-输出前k个最小数字
- 华为OJ训练之0020-170106-等差数列(寻找等差数列)
- 华为OJ训练之0007-151230-统计大写字母个数
- 华为OJ训练之0021-170106-尼科彻斯定理
- 华为OJ训练之0022-170107-24点游戏
- 华为OJ训练之0008-161230-输出链表倒数第k个数字
- 华为OJ训练之0023-170107-字符串的相似度
- 华为OJ训练之0009-161231-统计二进制数字中1的个数(求int型数据在内存中存储时1的个数)
- 华为OJ训练之0024-170107-杨辉三角的变形
- 华为OJ机试训练(一)
- 华为OJ训练之0010-161231-挑7
- 华为OJ训练之0025-170108-去掉重复数字
- 华为OJ训练之0041-170115-合并数据表记录
- 华为OJ训练之0011-170101-完全数
- 华为OJ训练之0026-170108-放苹果
- 华为OJ训练之0042-170115-整形数组排序
- 华为OJ训练之0012-170101-DNA序列
- 华为OJ训练之0043-170220-蛇形矩阵
- 华为OJ机试训练(一)
- 华为OJ训练之0013-170101-百钱百鸡问题