摆箱子

Description

有一堆形状完全一样的箱子,但是他们的强度不同,如果一个箱子的强度为x,那么这个箱子上面最多可以放x个箱子。

现在我们已知一堆箱子的强度,我们想把这些箱子放置成一列一列的形状,每一列包含多个箱子,问最少可以放置多少列。


Input

输入为多组数据,第一行为样例数T。

每组数据先输入一个n(1 <= n <= 100),表示箱子的总数。

紧接着输入n个数x1,x2,x3,,,xn(0 <= xi <= 100),第i个数表示第i个箱子的强度。


Output

输出只包含一个整数,表示最少的数列。


Sample Input

2

3

0 0 10

5

0 1 2 3 4


Sample Output

2

1



原来正解是从小到大使用贪心。


#include<bits/stdc++.h>
using namespace std;

int a[100+10], b[100+10];
int main()
{
    int T, n;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &n);
        memset(a, -1, sizeof(a));
        memset(b, 0, sizeof(b));
        for (int i = 0; i < n; i++)
            scanf("%d", &a[i]);
        sort(a, a+n);
        int t = n, ans = 0;;
        while(t > 0)
        {
            int flag = 0, num = 0;
            for(int i = 0; i < n; i++)
            {
                if(b[i] == 0 && flag == 0)
                {
                    flag = 1;
                    b[i] = 1;
                    num++;
                    t--;
                }
                if(b[i] == 0 && flag == 1)
                {
                    if(a[i] >= num)
                    {
                        num++;
                        b[i] = 1;
                        t--;
                    }
                }
            }
            ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}


根据您的描述,我假设您需要将14个纸箱放在卡板上,并满足以下条件: - 纸箱长边与卡板长边平行时,旋转角度为0;反之,则为90; - 箱子贴有标签,分别贴在箱子前面左面,需要保证最外侧的箱子最少有一个标签可见; - 根据纸箱卡板的尺寸,每层最多能放7个纸箱; - 需要提供每个纸箱在卡板上的坐标以及旋转角度。 基于以上假设,可以使用Python程序来计算每个纸箱的坐标旋转角度。以下是一个简单的程序示例: ```python import math # 卡板长宽 board_length = 1220 board_width = 1016 # 纸箱长宽 box_length = 340 box_width = 255 # 计算行列数 row_num = 2 col_num = 7 # 计算每个纸箱的坐标旋转角度 for i in range(row_num): for j in range(col_num): # 计算当前纸箱的编号 box_id = i * col_num + j + 1 # 计算当前纸箱的坐标 if i % 2 == 0: x = j * (box_length + 5) + box_length / 2 else: x = board_length - j * (box_length + 5) - box_length / 2 y = i * (box_width + 5) + box_width / 2 # 计算当前纸箱的旋转角度 if (i % 2 == 0 and j % 2 == 0) or (i % 2 != 0 and j % 2 != 0): angle = 0 else: angle = 90 # 输出当前纸箱的坐标旋转角度 print("Box %d: (%d, %d), angle=%d" % (box_id, x, y, angle)) ``` 程序首先定义了卡板纸箱的长宽,以及每行每列可以放置的纸箱数量。然后,程序使用两个嵌套循环来计算每个纸箱的坐标旋转角度。在计算每个纸箱的坐标时,程序根据当前行数列数来确定xy的值。在计算每个纸箱的旋转角度时,程序根据当前纸箱的位置来确定旋转角度。最后,程序输出每个纸箱的坐标旋转角度。 通过这个程序,您可以得到每个纸箱在卡板上的坐标以及旋转角度。请注意,程序中的坐标单位为毫米。如果您需要将坐标转换为其他单位,请根据需要进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值