UVA 102 - Ecological Bin Packing

暴力枚举嘤嘤嘤
用0表示B,1表示G,2表示C
代码如下:

#include <bits/stdc++.h>

using namespace std;

int name[6][3]= {0,2,1,0,1,2,2,0,1,2,1,0,1,0,2,1,2,0};
int main()
{
    int x[3][3],i,j,y,Min;
    while(cin>>x[0][0]>>x[0][1]>>x[0][2])
    {
        for(i=1; i<3; ++i)
            cin>>x[i][0]>>x[i][1]>>x[i][2];
        for(i=0; i<6; ++i)
        {
            y=0;
            y+=(x[1][name[i][0]]+x[2][name[i][0]]);
            y+=(x[0][name[i][1]]+x[2][name[i][1]]);
            y+=(x[0][name[i][2]]+x[1][name[i][2]]);
            if(!i)
            {
                Min=y;
                j=i;
            }
            if(y<Min)
            {
                Min=y;
                j=i;
            }
        }
        for(i=0; i<3; ++i)
        {
            if(name[j][i]==0)cout<<"B";
            if(name[j][i]==1)cout<<"G";
            if(name[j][i]==2)cout<<"C";
        }
        cout<<" "<<Min<<endl;
    }
    return 0;
}

阅读更多

Bin Packing优化算法

04-15

求优化算法,目前情况如图:rn[img=http://img.my.csdn.net/uploads/201304/15/1366004845_5338.jpg][/img]rn目前算法如下:rn1.组合同类为一个大的新箱子(各个方向的适应度算出来,取最大的方向),然后后按 体积、底面积 降序排列。rn2.根据遗传算法 预填充(检测交叉)rn3.检测通过,从待箱子集合中移除,放入已确认集合,默认出来是三角衍生的,我这做了一个坐标系统排序,具体就不说了。rn4.检测不通过,拆分成列,重复上述过程。rn5.还不通过,拆分成单个,重复。rn6.还不通过 旋转。rn7.还不通过 说明满了。rnrn目前的问题是,组合的时候,举例说明如下:rn[color=#0000FF]x:横向,y:垂直,z:深度[/color]rnA箱子 有 100个。rn正常摆放,要放10个z轴刻度rn但如果是x轴上前6个正常放,后4个width和height对调,就只要放 8个z轴刻度就可以了。rnrn这就是我的问题。rn组合时 是 集装箱.Width/箱子.Width算出来 x上可以放几个的。同理y、z。这里面都是同一方向的。rn可以理解为 空间足够的情况下,我并不知道怎么放才是最好的。rn然后就是可能旋转后,x方向可能是优化了,但导致整体 利用率降低了。rn所以。。。。。。。。。。。。。唉,怎么办rnrn求大神,分数不多,但问题值得探讨。rnrn有兴趣一起搞的朋友可以+QQ:366106280 验证:Bin Packingrn

没有更多推荐了,返回首页