• 最优装载问题


    最优装载

    描述


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

    编程任务: 对于给定的n个集装箱和轮船的载重量C,编程计算装入最多时的集装箱个数。


    输入

    输入由多组测试数据组成。每组测试数据输入的第1行中有2个正整数n和C。正整数n是集装箱个数;正整数C是轮船的载重量。接下来的一行中有n个整数,分别表示n个集装箱的重量,它们之间用空格分隔。其中1<=n<=2000,所有正整数不超过231-1

    输出

    对应每组输入,输出的每行是计算出的装入最多时的集装箱个数。

    样例输入

    4 5
    3 5 2 1


    样例输出

    2

    解决:贪心算法入门题,其实代码可以很短的,就是选择最小的装在里边就行了,但是还是练习下记录哪个装入为好

    #include <iostream>
    #include <algorithm>
    #include <bitset>
    using namespace std;
    struct node
    {
        int id;
        int val;
    };
    node box[2005];
    int n,c;
    bool operator <(const node &a,const node &b)
    {
        return a.val<b.val;
    }
    void greedySelect()
    {
        sort(box,box+n);              
        bitset<2005> b;
        b.reset();
        for(int i=0;i<n;i++)
         if(box[i].val <= c)
         {
              b[box[i].id]=1;
              c-=box[i].val;
         }
         else break;
         cout<<b.count()<<endl;
    }
    int main()
    {
        while(cin>>n>>c)
        {
            for(int i=0;i<n;i++)
            {
                box[i].id=i;
                cin>>box[i].val;
            }
            greedySelect(); 
        }
        return 0;
    }
    
  • 相关阅读:
    设计模式之模板方法
    UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
    JAVA并行框架学习之ForkJoin
    生产环境上shell的解读
    设计模式之中介者模式
    设计模式之策略模式
    设计模式之状态模式
    深入理解动态代理
    深入理解Java虚拟机
    深入理解Java虚拟机
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2194803.html
Copyright © 2020-2023  润新知