笔试题:马戏团(搜狐)

搜狐员工小王最近利用假期在外地旅游,在某个小镇碰到一个马戏团表演,精彩的表演结束后发现团长正和大伙在帐篷前激烈讨论,小王打听了下了解到, 马戏团正打算出一个新节目“最高罗汉塔”,即马戏团员叠罗汉表演。考虑到安全因素,要求叠罗汉过程中,站在某个人肩上的人应该既比自己矮又比自己瘦,或相等。 团长想要本次节目中的罗汉塔叠的最高,由于人数众多,正在头疼如何安排人员的问题。小王觉得这个问题很简单,于是统计了参与最高罗汉塔表演的所有团员的身高体重,并且很快找到叠最高罗汉塔的人员序列。 现在你手上也拿到了这样一份身高体重表,请找出可以叠出的最高罗汉塔的高度,这份表中马戏团员依次编号为1到N。

输入描述:
首先一个正整数N,表示人员个数。 
之后N行,每行三个数,分别对应马戏团员编号,体重和身高。


输出描述:
正整数m,表示罗汉塔的高度。

输入例子:
6
1 65 100
2 75 80
3 80 100
4 60 95
5 82 101
6 81 70

输出例子:

4



用一个vector<vector<int>>存放员工数据。先以体重做比较进行增序排序。排序完后,找出身高的最长递增子序列长度。

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

bool CompWeight(const vector<int>& pl, const vector<int>& p2)
{  
  	return pl[0] <= p2[0];  
}

int lengthOfLIS(vector<vector<int>>& persons) 
    {
        int len = persons.size();
        int Max = 0;
        vector<int> lens(len, 1);
        
        for(int i=1; i<len; i++)
        {
            int tmpMax = 0;
            for(int j=0; j<i; j++)
                if(persons[j][0]==persons[i][0] || persons[j][1] <= persons[i][1])
                    tmpMax = max(tmpMax, lens[j]);
            lens[i] = tmpMax + 1;
        }
        
        for(int i=0; i<len; i++)
            Max = max(Max, lens[i]);
            
        return Max;
    }

int fun(){
    int N;
    cin>>N;
    if(N == EOF)
        return -1;
    vector<vector<int>> persons(N, vector<int>(2, 0));
    for(int i=0; i<N; i++){
        int tmp;
        cin>>tmp>>persons[i][0]>>persons[i][1];
    }
    
    sort(persons.begin(), persons.end(), CompWeight);
    int max = lengthOfLIS(persons);
    
    cout<<max<<endl;
    
    return 0;
}

int main()
{
    while(1)
        if(fun() == -1)
            break;
        
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值