算法之最优装载

1.问题描述:有一批集装箱要装上一艘载重量为c的轮船,其中集装箱i的重量为wi。最优装载问题要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

该问题可以形式化描述为:


式中xi=0表示不装入集装箱i,xi=1表示装入集装箱i。

2.问题分析:因为体积不受限制,每个集装箱除重量外都一样,所以为了装尽可能的集装箱,可以优先选择重量最轻的集装箱装入,依次类推。

3.贪心选择性质:每次选择重量最轻的集装箱装入,即每次选择局部最优的解,最终可以得到该问题的最优解。

4.最优子结构性质:(y1,y2,,yn)是所给0-1背包问题的一个最优解,则(y2,y3,,yn)是如下子问题的一个最优解:

 

#include <iostream>
using namespace std;

void Loading(int x[],int w[],int c,int n)
{
    //可以先对w进行排序
    int weight=0;
    for(int i=0;i<n;i++)
    {
        weight+=w[i];
        if(weight<=c)x[i]=1;
        else x[i]=0;
    }
}


int main()
{
    int w[]={1,2,3,4,5,6};
    int x[6],c=10,n=6;
    Loading(x,w,c,n);
    for(int i=0;i<n;i++)
        cout<<x[i]<<" ";
}

复杂度分析:主要体现在排序上

猜你喜欢

转载自blog.csdn.net/qq_35503380/article/details/80396489
今日推荐