zoukankan      html  css  js  c++  java
  • 2799 高校排名 加强版

    2799 高校排名 加强版

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
     
    题目描述 Description

    大学排名现在已经非常流行。在网上搜索可查到关于中国大学排行的各个方面的消息。

    我们知道,在一大学里通常都由许多不同的(专业)组成,比如计算机系(简称CS);电子工程系(简称EE);外语系(简称FLS),等等。在一个大学里,其某一专业也许国内排前几,但其他专业却默默无闻。因此,大多数大学排行榜都有不同专业的详细的排名。

    但是信息量如此巨大的光芒,却掩盖不了一个严重的问题:究竟哪个大学更好?幸运的是,波布博士提出了一个新概念绝对更好使得这个难题能被部分解决。

    为了更好地阐述波布博士的新概念,我们举一个例子:

    假设现在有三大学:X大学、Y大学、Z大学。每所大学都有三个专业:CSEEFLS。而这三所大学三个专业国际公认的排名如下:

    CS排名:X>Y>ZX>Y表示XCS专业比Y的好)

    EE排名:X>Z>Y

    FLS排名:Z>X>Y

    显然,X大学的每个专业都比Y大学好,所以X大学绝对比Y大学好。运用这个概念我们就能比较出一些大学的优劣。

    现在波布博士有一份完整的各个大学不同专业的排名,他想找出这样的K个大学(U1U2U3…,Uk),Ui一定比Uji<j)好。

    你能告诉波布博士这个K的最大值么?

    输入描述 Input Description

    第一行有两个整数NM0<N,M≤100),表示有N所大学和M项专业。

    接下来的M行中,第i1<=i<=m)行有N所大学的编号Uj1≤j≤N,1≤Uj≤N),代表第i个专业N大学的排名(越在前的排名越前)。

    输出描述 Output Description

    输出文件应该一行,该行是K值的最大值。不需要多余的空格。

    样例输入 Sample Input

    3 3

    1 2 3

    1 3 2

    3 1 2

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

    0<N,M≤100

    分类标签 Tags 点此展开 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    题解:

    第一次用 面向对象

    预处理一下

    按总排名排一下序

    求一下最长上升子序列

    完成

    (具体原因,自行脑补)

    AC代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=110;
    class node{
        public:
            void modify(int i,int x){s=s+x;g[i]=x;}
            int at(int i){return g[i];}
            int sum(){return s;}
            int operator [](int i){return at(i);}
        private:
            int g[N],s;
    }a[N];
    int n,m,ans,f[N];
    bool cmp(node x,node y){
        return x.sum()>y.sum();
    }
    bool compare(node x,node y){
        for(int i=1;i<=m;i++) if(x[i]>y[i]) return 0;
        return 1;
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1,v;i<=m;i++){
            for(int j=1;j<=n;j++){
                scanf("%d",&v);
                a[v].modify(i,j);
            }
        }
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;i++) f[i]=1;
        for(int i=1;i<=n;i++){
            for(int j=1;j<i;j++){
                if(compare(a[i],a[j])){
                    f[i]=max(f[i],f[j]+1);
                }
            }
        }
        for(int i=1;i<=n;i++) ans=max(ans,f[i]);
        printf("%d",ans);
        return 0;
    }

     

  • 相关阅读:
    Azure 虚拟机诊断设置问题排查
    虚拟机压力测试延迟高的可能原因及 ILPIP 配置 / 查询脚本
    理解 Azure 平台中虚拟机的计算能力
    如何复制或导出托管磁盘
    理解托管磁盘的原理与优势
    Azure 托管镜像和非托管镜像对比
    如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
    如何将同一 VNET 下的虚拟机从经典部署模型迁移到 Azure Resource Manager
    如何将使用托管磁盘虚拟机的 OS 盘挂载到其他虚拟机上
    基于 Azure 托管磁盘配置高可用共享文件系统
  • 原文地址:https://www.cnblogs.com/shenben/p/6006461.html
Copyright © 2011-2022 走看看