算法设计例题:最优装载(贪心)

本文通过一个算法设计例题介绍了最优装载问题,该问题探讨如何在不限体积的情况下,利用贪心策略将最多的集装箱装载到载重量为C的轮船上。题目给出输入包括测试样例数、集装箱数量及重量,输出为能装载的最大集装箱数及其对应的总重量。样例展示了一个包含5个集装箱和载重100的情况。

算法设计例题:最优装载(贪心)

memory limit: 32768KB    time limit: 1000MS

accept: 14    submit: 35

Description

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

Input

输入的第一个为测试样例的个数T( T <= 100 ),接下来有T个测试样例。每个测试样例的第一行是一个整数n( n <= 1000 )和一个非负数C( C <= 10000 ),分别表示集装箱的个数以及轮船的载重量。接下来有n行,每行一个非负数,表示每个集装箱的重量。

Output

对应每个测试样例输出一行,格式为"Case #: D V",其中'#'表示第几个测试样例(从1开始计),D为轮船可以装载的集装箱数量的最大值,V为满足D最大时轮船的实际载重量。

Sample Input

1
5 100
20
50
120
99
30

Sample Output

Case 1: 3 100

#include"iostream"
#include"map"
usingnamespace std ;
float c = 10 ;
int  d = 0 ;
int sum = 0 ;
classElement{
public:
    intx ;
    floatw ;
};
voidloding(multimap <float,Element > &m ,int n )
{
    multimap <float,Element >::iterator t  = m.begin();
    while(n>0&&((*t).second).w<=c)
    {
        d=d+(*t).first;
        c=c-((*t).second).w;
        ((*t).second).x=1;
        ++t;
        n--;
        sum++;
    }
}
int main()
{
    intm = 3 ;
    intn ;
    Element e ;
    multimap <float,Element > mm ;
    cin>>m ;
    intj =1 ;
    while(m>0)
    {
 
        cin>>n ;
        cin>>c;
        inti =1 ;
 
        while(i<=n )
        {
            cin>>e.w;
            mm.insert(pair<float, Element >(e.w,e));
            i++;
        }
        loding( mm, n );
        cout<<"Case "<<j<<": "<<sum<<" "<<d<<endl;
        mm.clear();
        sum = 0 ;
        d = 0 ;
        m-- ;
        j++;
    }
    return0 ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值