马戏团-Java

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

动态规划,用到了最长上升子序列问题。首先对身高冒泡排序体重随身高一起交换,身高相同时,体重轻的在上,然后求最长体重上升子序列的长度。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in= new Scanner(System.in);
        while(in.hasNext()){
        int N = Integer.parseInt(in.nextLine());
        int a[][] = new int[N][3];
        for (int i = 0; i < N; i++) {
            String str = in.nextLine();
            String b[]=str.split(" ");
            for (int j = 0; j < 3; j++) {
                a[i][j]=Integer.parseInt(b[j]);
            }
        }
        for (int i = 0; i < N-1; i++) {
            for (int j = i+1; j < N; j++) {
                if(a[i][1]<a[j][1]){
                    int b = a[i][1] ;
                    a[i][1] = a[j][1] ;
                    a[j][1]=b ;
                    int c = a[i][2] ;
                    a[i][2] = a[j][2] ;
                    a[j][2]=c ;
                }else if(a[i][1]==a[j][1]&&a[i][2]>a[j][2]){
                     int b = a[i][1] ;
                    a[i][1] = a[j][1] ;
                    a[j][1]=b ;
                    int c = a[i][2] ;
                    a[i][2] = a[j][2] ;
                    a[j][2]=c ;
                }
            }
        }
        int count[]=new int[N];
        for (int i =0;i< N; i++) {
            count[i]=1;
            for (int j = 0;j < i;j++) {
                if(a[j][2]>=a[i][2]&&count[j]+1>count[i])
                    count[i]=count[j]+1;
                }
            
        }
        int max=0;
         for(int i = 0;i<N;i++)
        if(max < count[i])
        max = count[i];
        System.out.println(max);
        }
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
)太阳马戏团是一个由表演者、杂技师、驯兽师和其他工作人员组成的团体。该团体可以通过面向对象的多态特征实现。 首先,表演者、杂技师和驯兽师都是太阳马戏团的员工,可以将它们抽象为一个基类Employee。该类包含员工的基本信息,例如姓名、年龄和工作经验等。 接下来,每个员工都有自己独特的技能,例如表演者会唱歌跳舞,杂技师会做各种特技,驯兽师会训练动物等。因此,可以为每个员工定义一个虚函数perform(),用于执行员工的特定技能。例如,表演者的perform()函数可以是唱歌跳舞,杂技师的perform()函数可以是做特技,驯兽师的perform()函数可以是训练动物。 此外,太阳马戏团还有其他工作人员,例如售票员和保安等。这些工作人员不需要perform()函数,因此可以将它们定义为Employee类的派生类,但不需要重写perform()函数。例如,售票员和保安可以分别定义为TicketSeller和SecurityGuard类,它们都是Employee类的派生类,但不需要定义perform()函数。 最后,太阳马戏团可以实现一个show()函数,用于执行整个马戏团的表演。该函数可以遍历所有的员工,并调用它们的perform()函数,以展示每个员工的技能。例如,show()函数可以遍历所有的员工,如果是表演者,就调用perform()函数唱歌跳舞;如果是杂技师,就调用perform()函数做特技;如果是驯兽师,就调用perform()函数训练动物;如果是售票员或保安,就不需要执行任何操作。 通过这种方式,太阳马戏团可以使用面向对象的多态特征实现,简化代码并提高代码的可维护性和可扩展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值