1 条题解

  • 0
    @ 2026-9-30 12:58:25

    C++ :

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    /*
      盒子打包:盒子只能套进严格更大的盒子,并且每个盒子最多直接装一个盒子。
      同一尺寸的盒子之间无法互相嵌套(要求 ai < aj),
      所以把每个尺寸各取一个、按尺寸从小到大叠成一列,能叠的高度就是该尺寸的出现次数。
      出现次数最多的那个尺寸决定了最少可见数:这些盒子必须各自成为某一列的"最外层"或独立可见,
      而当列数 = 最大出现次数时,总能按尺寸递增把其余盒子分配进各列。
      样例 4 / 4 2 4 3 -> 尺寸 4 出现 2 次 -> 2。
    */
    static long long a[5005];
    int main(){
        int n;
        if(scanf("%d", &n) != 1) return 0;
        for(int i = 1; i <= n; i++) scanf("%lld", &a[i]);
        sort(a + 1, a + 1 + n);
        long long best = 0, cur = 1;
        for(int i = 1; i < n; i++){
            if(a[i] == a[i + 1]) cur++;
            else { if(cur > best) best = cur; cur = 1; }
        }
        if(cur > best) best = cur;
        printf("%lld\n", best);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2848
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者