最優裝載(貪心演算法)
演算法設計例題:最優裝載(貪心)
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;
}