南邮 OJ 1031 建筑群最长坡值
2015-08-03 10:51
369 查看
建筑群最长坡值
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 659 测试通过 : 259
比赛描述
建筑群所有建筑高度分别为h1、h2…hN,可以得到一些单调递减的序列hi1、hi2…hiK,其长度称为建筑群的坡值,这里1≤i1<
i2<…< iK≤N。
你的任务:对于给定的建筑群所有建筑高度,求出建筑群最长坡值。
输入
第一行是建筑群中的建筑数N(1≤N≤1000)。
第二行依次给出各个建筑的高度(大小从0到1000),中间用空格分开。
输出
建筑群最长坡值
样例输入10
108 60 79 50 119 40 90 230 20 80
样例输出
5
题目来源
南京邮电大学计算机学院首届ACM程序设计大赛(2009)
#include <iostream>
#include <vector>
#define MAX(a,b) (a>b?a:b)
using namespace std;
class building{
public:
int height;
int degree;
};
int main(void){
int N=0,i=0,j=0,maxDeg=0;
building temp;
vector<building> buildings;
cin>>N;
for(i=0;i<N;++i){
cin>>temp.height;
temp.degree=1;
buildings.push_back(temp);
}
for(i=N-1;i>=0;--i){
buildings[i].degree = 1;
for(j=i+1;j<N;++j){
if(buildings[i].height > buildings[j].height){
buildings[i].degree = MAX(buildings[i].degree,buildings[j].degree+1);
}
}
}
for(i=0;i<N;++i){
if(maxDeg<buildings[i].degree){
maxDeg = buildings[i].degree;
}
}
cout<<maxDeg<<endl;
}