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

被折叠的 条评论
为什么被折叠?



