现在的位置: 首页 > 综合 > 正文

最优装载(贪心算法)

2013年10月17日 ⁄ 综合 ⁄ 共 950字 ⁄ 字号 评论关闭

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

memory limit: 32768KB    time limit: 1000MS

accept: 24    submit: 68

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

Author

Eapink

解决代码:

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int i,j,testNum,containerNum;//分别为测试个数、集装箱个数
float weight[1000];//集装箱重量
float load;//轮船载重量
cin>>testNum;

for(i=0;i<testNum;i++)
{
  cin>>containerNum>>load;
       for(j=0;j<containerNum;j++)
  cin>>weight[j];
  sort(weight,containerNum+weight);
  //开始装载
  int count=0;
  float sum=0.0;
  for(int k=0;k<containerNum;k++)
  {
  if(load>=weight[k])
  {
  sum=sum+weight[k];
  load=load-weight[k];
  count++;
  }
  else
  break;
  
  }
  cout<<"Case "<<i+1<<": "<<count<<" "<<sum<<endl;
}

return 0;

}

抱歉!评论已关闭.