C语言装箱问题分析()

有一个长度为L,无限高的长方形,现放入n个长度为l(l为2的n次方且l<=L),高为1的长方形,求放入的长方形最低高度
(长方形只能横着放)
求分析思路

没看懂,啥意思?尽量让L能多装点l呗......n个长方形的长度l都是相等的吗?还是不完全相同?

#include <stdio.h>
int L[10000],s[10000] = {0};//假设最多10000个长方块
int n;
int getFitL(int l,int i)
{
    while(i<n)
    {
        if(s[i] == 0 && L[i] <= l)
            return i;
        i++;
    }
    return -1;
}

int main()
{
    int i,j,h=0,r=0,t,N,m; 
    printf("请输入箱子长度:");
    scanf("%d",&N);
    printf("请输入长方块的数量:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("请输入第%d块长方块的长度:",i);
        scanf("%d",&L[i-1]);
    }
    //排序,简单使用冒泡排序,数量较多时可以选择其它排序法
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
        {
            if(L[j] < L[j+1])
            {
                t = L[j];
                L[j] = L[j+1];
                L[j+1] = t;
            }
        }
    //开始放置长方块
    i=0;
    while(1)
    {
        i=0;
        r=0;
        while(i<n && s[i] != 0) //找下一层的起始块
            i++;
        if(i==n)  //表示所有长方块都已放置完成
        {
            break;
        }
        r = L[i];
        s[i] = 1;
        h++; //高度加1
        printf("第%d层:%d ",h,L[i]);
        m = i+1;
        while(r<N)
        {
            m = getFitL(N-r,m+1);
            if(m==-1)  //选不到合适的长方块时,这该层选择结束
            {
                break;
            }
            else 
            {
                r += L[m];
                s[m] = 1;
                printf("%d ",L[m]);
                if(r==N)
                    break;
            }
        }
        printf("\n");
    }
    printf("高度为:%d\n",h);
    return 0;
}

代码如下

#include <stdio.h>
int main()
{
    int L, l, n;
    int h, t;
    scanf("%d %d %d", &L, &n, &l); //输入L n l
    t = L / l; //每行能放小箱子的个数
    if (n % t == 0)
        h = n / t; //小箱子高为1,这里就不再乘以1了
    else
        h = (n / t) + 1;//小箱子高为1,这里就不再乘以1了
    printf("%d", h);
    return 0;
}

L和l都确定了,长方形还只能横着放,那就只剩一种放法了,就是往里面按顺序放呗
只要是能放3列别放1列就肯定是最低的呀
记每层放的个数m=L/l
如果n%m==0,那么高度=n/m
否则高度=n/m+1