atcoder#AGC018B. [AGC018B] Sports Festival

[AGC018B] Sports Festival

题目描述

高橋君は、スポーツ大会を開こうと考えています。 スポーツ大会に参加するのは、1 1 から N N までの番号のついた N N 人の人です。 また、大会で行うスポーツとして、1 1 から M M までの番号のついた M M 個のスポーツが候補に上がっています。 高橋君は、これらの中から 1 1 つ以上(全てでもよい)のスポーツを選んで、スポーツ大会で実施します。

高橋君は、人 i i が、j j 番目に好きなスポーツが Aij A_{ij} であることを知っています。 それぞれの人は、スポーツ大会で実施されるスポーツのうち、自分が最も好きなスポーツだけに参加し、他のスポーツには参加しません。

高橋君は、一つのスポーツにたくさんの人が集まり過ぎることを懸念しています。 そこで高橋君は、スポーツ大会で実施するスポーツをうまく選んで、最も多くの人が参加しているスポーツの参加人数を最小化したくなりました。 最も多くの人が参加しているスポーツの参加人数の最小値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N M M A11 A_{11} A12 A_{12} ... ... A1M A_{1M} A21 A_{21} A22 A_{22} ... ... A2M A_{2M} : : AN1 A_{N1} AN2 A_{N2} ... ... ANM A_{NM}

输出格式

最も多くの人が参加しているスポーツの参加人数の最小値を出力せよ。

题目大意

Takahashi举办了一场运动会,这场运动会有M个项目,有N个人来参加。

给你一个N*M的二维数组a,其中a[i][j]表示第i个人,她心目中排名第j的项目是哪个。

这M个项目不一定全都要进行,可以选其中一些项目进行,剩下的都鸽掉,当然肯定不能鸽掉所有M个项目。

每个人会在所有开展的项目当中,选择她心目中排名最高的那个项目参加。

因此,如果开展全部项目的话,可能某个项目的人数会爆多无比,所以Takahashi决定,只开展其中的一部分项目,使得参加人数最多的那个项目,参加人数尽量少。

请输出这个值。

———from@__stdcall

4 5
5 1 3 4 2
2 5 3 1 4
2 3 1 4 5
2 5 4 3 1
2
3 3
2 1 3
2 1 3
2 1 3
3

提示

制約

  • 1  N  300 1\ \leq\ N\ \leq\ 300
  • 1  M  300 1\ \leq\ M\ \leq\ 300
  • Ai1 A_{i1} , Ai2 A_{i2} , ... ... , AiM A_{iM} は、1 1 から M M の順列である。

Sample Explanation 1

スポーツ 1 1 ,3 3 ,4 4 を実施することにすると、人 1 1 はスポーツ 1 1 に、人 2 2 はスポーツ 3 3 に、 人 3 3 はスポーツ 3 3 に、人 4 4 はスポーツ 4 4 に参加します。 このとき、参加人数が最大のスポーツはスポーツ 3 3 で、その参加人数 2 2 人です。 また、参加人数が最大のスポーツの参加人数が 1 1 人になるような方法は存在しないので、この例の答えは 2 2 になります。

Sample Explanation 2

全員の好みが一致しているので、どうやっても一つのスポーツに 3 3 人集まってしまいます。 よってこの例の答えは 3 3 です。