zoukankan      html  css  js  c++  java
  • 装载问题(load)

    装载问题(load)

    问题描述:

    有一批共n 个集装箱要装上艘载重量为c 的轮船,其中集装箱i 的重量为wi。找出一种最

    优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装

    上轮船。

    输入格式:

    第一行有2 个正整数n(1<=n<=40)和c。n 是集装箱数,c 是轮船的载重量。接下来的1 个有

    n 个正整数,表示集装箱重量。

    输出格式:

    输出最大装载量

    输入样例:

    5 10

    7 2 6 5 4

    输出样例:

    1. 10

    ****

     1 #include<iostream>
     2 
     3 #include<cstdlib>
     4 
     5 using namespace std;        
     6 
     7 int n,c,a[1000],i,m=0;
     8 
     9 bool f[1000];
    10 
    11  
    12 
    13 void fa(int s,int t)
    14 
    15 {
    16 
    17          int i;
    18 
    19          if (s==c){cout<<s<<endl;exit(0);} //如果和要求的载重量相同那么一定是最优解
    20 
    21          if (s>c) {return;}    //如果已放的重量超载那就回溯剪掉这次的重新加
    22 
    23          if (s>m)m=s;  //m表示最大重量如果新方法可使重量大于原先的重量那么更新最大重量
    24 
    25          //if (t>n){cout<<m<<endl;exit(0);}
    26 
    27          for (i=1;i<=n;i++)  //循环每一个物体
    28 
    29            if (f[i])  //如果这个物体没有被放
    30 
    31            {
    32 
    33                 f[i]=false;   //那么放这个物体并且把这个物体标记为已放
    34 
    35                 s+=a[i];  //重量更新
    36 
    37                 fa(s,t+1);  //再次判断这个物体是否还可以再加 变的更大
    38 
    39                 s-=a[i];   //如果不能剪掉这一次然后重新加,并且把这个物体放回去标记为待放
    40 
    41                 f[i]=true;
    42 
    43            }
    44 
    45 }
    46 
    47  
    48 
    49  
    50 
    51 int main()
    52 
    53 {
    54 
    55          cin>>n>>c;
    56 
    57          for (i=1;i<=n;++i)cin>>a[i];
    58 
    59          for (i=1;i<=n;++i)f[i]=true;   //表示物体待放
    60 
    61          fa(0,1);      //s表示已放的重量
    62 
    63         cout<<m<<endl;
    64 
    65          return 0;
    66 
    67 }

    先把所有物体设为待放,然后一个一个使满足要求就继续并且更新最大值,不满足要求返回重新加。

    ***一开始的时候我是循环从i个数加到第j个数字,若加上去的数离c更近就保存这个数,如果比c大就变回加之前的数最后把保存下来的最大值输出。样例是过了。可能是面对其他的数据会有遗漏的可能性吧。

  • 相关阅读:
    进程-线程-消息队列
    用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
    TCP协议三次握手过程分析【图解,简单清晰】
    excel批量删除sql语句
    批量删除指定盘指定格式文件
    Linux命令速查手册(第2版)学习
    List、Map、Set 三个接口,存取元素时,各有什么特点
    HashMap 什么时候进行扩容呢
    两个对象值相同 (x.equals(y) == true),但却可有不同的 hash code,这句话对不对?
    ArrayList,Vector, LinkedList 的存储性能和特性
  • 原文地址:https://www.cnblogs.com/rax-/p/8680767.html
Copyright © 2011-2022 走看看