贪心算法之最优装船问题

       越来越发现自己的编程功底很差,于是近期打算恶补下。看到一题目,初见觉得很简单,但是实际编程的时候,可能是由于自己的基本功太弱的原因吧,还是花费了很长的时间的。题目如下:       

          有一批集装箱要装入一个载质量为C的货船种,每个集装箱的质量由用户自己输入指定,在货船的装载体积不限的前提下,如何装载集装箱才能尽可能多地的将集装箱装入货船中。

 

 

         看到该题,第一想到的就是贪心算法。关键在于将问题抽象出来,其实每个箱子是有两个特性的。箱子的质量以及箱子的编号(隐藏的)。抽象出这两点就好办多了。实现将箱子按质量排序,在排序的过程中有点很重要,那就是在按质量移动箱子的时候,要让箱子的编号跟着一起移动。

    

         完整代码如下:

#include "stdio.h"

px(int h_1[],int h1_1[],int n_1,int n_2)
{
 int i_1,j_1;
 int temp=0;
 int temp_1=0;

 ///对数组h1_1[]初始化/
 for (i_1=0;i_1<8;i_1++)
 {
  h1_1[i_1]=i_1;
 }

 //冒泡排序///
 for (i_1=0;i_1<8;i_1++)
 {
  for (j_1=0;j_1<8;j_1++)
  {
   if (h_1[j_1]>h_1[j_1+1])
   {
    ///相邻的数互换//
    temp=h_1[j_1+1];
    h_1[j_1+1]=h_1[j_1];
    h_1[j_1]=temp;

    /将箱子号也移动/
    temp_1=h1_1[j_1];
    h1_1[j_1]=h1_1[j_1+1];
    h1_1[j_1+1]=temp_1;
   }
  }
 }

 for (i_1=0;(i_1<8)&&(h_1[i_1]<=n_2);i_1++)
 {
  n_2=n_2-h_1[i_1];//船剩余的载重量
  printf("%d ",h1_1[i_1]);//输出最优装船的箱子号
 }
}

int main()
{
 int c;
 int i;
 int h[8]={0};
 int h1[8]={0};
 int n; //货物的种数
 printf("请输入船的最大装载\n");
 scanf("%d",&c);
 printf("请输入8种货物的质量:\n");
 for (i=0;i<8;i++)
 {
  scanf("%d",&h[i]);
 }

 px(h,h1,8,c);//对货物的质量排序,并且用数组h1保存货物的箱子号(下表)
}

 

 

我发现我的变量命名,不是一般的稀瘪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值