贴一个java版的 枚举
参考了y总的视频和一楼的思路
题目给出
n:每份套餐需要n种食物
m:共m个食物
我们自定义变量
t:套餐最大数量
b:每份套餐食物数量
c:每种食物数量
可以推出
b1 + b2 + b3 … + bn = n
bn*t <= Cn
进一步可以推出:c1/t + c2/t + c3/t + … +cn/t >= n
理论上套餐最大数量:m/n
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
//最大的t
int tMax = m/n;
//因为m最大为100,所以初始化数组长度为101
int[] arr = new int[101];
//记录每一个食物出现的次数,食物未出现就为0,不影响后续计算的结果
for(int i = 0;i<m;i++){
arr[in.nextInt()]++;
}
//记录最终结果
int res = 0;
//从tMax开始倒序判断每个是否符合条件
for(int i = tMax;i>0;i--){
if(check(i,n,arr)) {
res = i;
break;
}
}
System.out.println(res);
}
//判断t是否合法,即t是否满足c1/t + c2/t + c3/t + ... +cn/t >= n
static boolean check(int t,int n,int[] arr){
int count = 0;
for(int i = 0;i<arr.length;i++){
count += arr[i]/t;
}
return count>=n;
}
}