文章目录

  • 问题描述
  • 问题分析
  • 算法步骤
  • 举例
  • 代码

问题描述

有一批集装箱要装上一艘重量为c的轮船。已知集装箱i(1<=i<=n)的重量为Wi,最优装载问题要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

问题分析

抽象的数学模型为

最优装载问题:n个集装箱E{1,2,…n},选出E的子集合,将尽可能多的集装箱装上轮船

贪心策略为重量最轻集装箱优先装载,从而给灭有装船的集装箱留下尽可能多的余量

算法步骤

1、将集装箱按照重量的非减序排列
2、依次从剩下的集装箱中选择重量最轻的货箱装船,直到所有集装箱均匀装上船或船上不能再容纳任何一个集装箱

举例

n=8,W={100,200,50,90,150,50,20,80},c=400
解:所考察,货箱的次序为:7,3,6,8,4,1,5,2。

第一次贪心选择集装箱7装船,船上集装箱的总重量为20吨
第二次贪心选择集装箱3装船,船上集装箱的总重量为70吨
第三次贪心选择集装箱6装船,船上集装箱的总重量为120吨
第四次贪心选择集装箱8装船,船上集装箱的总重量为200吨
第五次贪心选择集装箱4装船,船上集装箱的总重量为290吨
第六次贪心选择集装箱1装船,船上集装箱的总重量为390吨
第七次贪心选择集装箱5装船,如果装船,超过最大载重量,因此算法停止

6个集装箱1,3,4,6,7,8装船

代码

//4d3 贪心算法 最优装载问题
#include "stdafx.h"
#include <iostream>
using namespace std; const int N = 4;template <class Type>
void Swap(Type &x,Type &y); template<class Type>
void Loading(int x[],  Type w[], Type c, int n);template<class Type>
void SelectSort(Type w[],int *t,int n);int main()
{float c = 400;float w[] = {100,200,50,90,150,50,20,80};//下标从1开始int x[N+1];cout<<"轮船载重为:"<<c<<endl;cout<<"待装物品的重量分别为:"<<endl;for(int i=1; i<=N; i++){cout<<w[i]<<" ";}cout<<endl;Loading(x,w,c,N);cout<<"贪心选择结果为:"<<endl;for(int i=1; i<=N; i++){cout<<x[i]<<" ";}cout<<endl;return 0;
}template<class Type>
void Loading(int x[],Type w[], Type c, int n)
{int *t = new int [n+1];//存储排完序后w[]的原始索引SelectSort(w, t, n);for(int i=1; i<=n; i++){x[i] = 0;//初始化数组x[]}for(int i=1; i<=n && w[t[i]]<=c; i++){x[t[i]] = 1;c -= w[t[i]];}
}template<class Type>
void SelectSort(Type w[],int *t,int n)
{Type tempArray[N+1],temp;memcpy(tempArray,w,(n+1)*sizeof(Type));//将w拷贝到临时数组tempArray中int min;for(int i=1;i<=n;i++){t[i] = i;}for(int i=1;i<n;i++){min=i;for(int j=i+1;j<=n;j++){if(tempArray[min]>tempArray[j]){min=j;}}Swap(tempArray[i],tempArray[min]);Swap(t[i],t[min]);}
}template <class Type>
void Swap(Type &x,Type &y)
{Type temp = x;  x = y;  y = temp;
}

【贪心算法】最优装载问题C++语言相关推荐

  1. 最优装载c语言贪心算法,最优装载(贪心算法)

    算法设计例题:最优装载(贪心) memory limit: 32768KB    time limit: 1000MS accept: 24    submit: 68 Description 有一批 ...

  2. 算法设计与分析【第七周】贪心算法 最优装载问题

    最优装载问题 有一批集装箱要装上一艘载重量为c的轮船.其中,集装箱i的重量为Wi. 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船. 另外,单源最短路径(Dijistra算 ...

  3. 贪心算法两船装载问题Java_贪心算法-最优装载问题

    贪心选择算法为算法分析中一种常用算法,通过一系列的选择来得到一个问题的解.它所作的每一个选择都是当前状态下某种意义的最好选择,即贪心选择.希望通过每次所作的贪心选择导致最终结果是问题的一个最优解.这种 ...

  4. 贪心算法 | 最优装载问题——加勒比海盗船

    贪心算法的本质: 它是解决问题的策略上"目光短浅",只根据当前已有信息就做出选择,而且一旦做出选择,不管将来有什么结果,这个结果都不会发生改变.换言之,贪心算法并不是从整体最优考虑 ...

  5. 算法设计与分析——贪心算法——最优装载问题

    有一批集装箱要装上一艘载重量为c的轮船.其中集装箱i的重量为Wi.最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船. #include<iostream> #in ...

  6. 【趣学算法】Day2 贪心算法——最优装载问题

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法! ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️

  7. 贪心法——最优装载问题

    贪心法--最优装载问题 最优装载问题.给出nn个物体,第ii个物体重量为wiw_i.选择尽量多的物体,使得总重量不超过C<script id="MathJax-Element-230& ...

  8. 贪心算法之活动安排问题C语言代码

    贪心算法之活动安排问题C语言 问题描述 该问题要求高效地安排一系列争用某一公共资源的活动. n:活动的个数,其中每个活动都要求使用同一资源,如演讲会场等.而且在同一时间内只有一个活动能使用这一资源. ...

  9. 贪心算法解决最优装载问题c语言,贪心算法解决最优装载问题

    <贪心算法解决最优装载问题>由会员分享,可在线阅读,更多相关<贪心算法解决最优装载问题(4页珍藏版)>请在人人文库网上搜索. 1.author : Kevin Black/这个 ...

最新文章

  1. web前端,我的新开始
  2. 你以为的ASP.NET文件上传大小限制是你以为的吗
  3. 新一代视频AI服务 —— 阿里云智能视觉重磅发布
  4. SparkSubmit源码解读记录
  5. c++,static 静态成员变量 / 静态成员函数
  6. 经常使用的正则表达式
  7. 二位数组按某一个或多个字段值(升序/降序)排序
  8. 你需求什么样的图片素材资源,各种口味随你挑选!
  9. 蓝牙小电池图标_TWS同时兼有一圈二动铁配置?国产蓝牙耳机这是要玩哪样!
  10. ASP.NET对IIS中的虚拟目录进行操作
  11. 微博视频下载去水印 视频消重
  12. 三斜线表头表格HTML,excel三栏斜线表头的完美制作方法
  13. 16.【linux驱动】spi驱动TFT液晶屏
  14. Echarts visualMap:piece划分方法
  15. HBuilderX接夜神Android模拟器调试
  16. 微信开发工具实现订阅消息功能
  17. x requested with php,跨域Ajax访问header中 x-requested-with丢失
  18. 用Java语言实现文本内容对比的算法和程序
  19. 对一个整形数组进行顺序排列
  20. 一年200多天不上网 看远望7号船员怎么玩抖音

热门文章

  1. matlab求定积分和不定积分
  2. eof() 和fail()
  3. 二分图(染色法+匈牙利法)学习笔记
  4. 几个你需注意的数据库设计原则(新手必看)
  5. 三线制Pt100隔离器在掘进机电机保护系统中的应用
  6. 【数据分析】分析方法 | 业务知识 | 行业分析
  7. C++面向对象实现一个模板类链表
  8. windows下mysql8初始化
  9. go-issues#14592 runtime: let idle OS threads exit 内核线程暴增与线程回收问题
  10. excel表格锁定怎么解锁_让用户锁定或解锁Excel工作簿