题目大意:
给你n个箱子的尺寸,大的箱子能套小的箱子,现在你要用大的箱子来套小的箱子,使得总箱子数量最小,并在总箱子数最小的情况下,使得套的层数尽量小。
解析:
不用说肯定是贪心,由于相同大小的箱子不能互相嵌套,所以外围箱子的个数取决于最多箱子的个数,那么最多箱子的个数k确定下来了。那么就按照
给你n个箱子的尺寸,大的箱子能套小的箱子,现在你要用大的箱子来套小的箱子,使得总箱子数量最小,并在总箱子数最小的情况下,使得套的层数尽量小。
解析:
不用说肯定是贪心,由于相同大小的箱子不能互相嵌套,所以外围箱子的个数取决于最多箱子的个数,那么最多箱子的个数k确定下来了。那么就按照
1,2,3...k,1,2,3..k,这样输出就好了。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010;
int num[N],bag[N];
int maxn;
int main() {
int flag = 0;
int n;
while(scanf("%d",&n) != EOF && n) {
if(flag++) {
printf("\n");
}
maxn = 0;
memset(num,0,sizeof(num));
for(int i = 0; i < n; i++) {
scanf("%d",&bag[i]);
num[bag[i]]++;
maxn = max(maxn,num[bag[i]]);
}
printf("%d\n",maxn);
sort(bag,bag+n);
for(int i = 0; i < maxn; i++) {
for(int j = i; j < n; j += maxn) {
printf("%d",bag[j]);
if(j + maxn >= n) {
printf("\n");
}else {
printf(" ");
}
}
}
}
return 0;
}